zoukankan      html  css  js  c++  java
  • 第二次结对编程作业

    组内UI视频

    王耀鑫+林银河

    沈梓耀+黄恒杰

    许培荣+陈湘怡

    陈超颖+林鑫灿(8)

    陈志荣+林明镇

    滕佳+何佳琳

    1.链接

    结对同学博客
    本次作业博客
    Github地址

    2.具体分工

    • 林银河:完成AI的实现
    • 王耀鑫:完成UI的实现

    3.PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 10 20
    Estimate 估计这个任务需要多少时间 600 700
    Development 开发 1200 1800
    Analysis 需求分析 (包括学习新技术) 100 300
    Design Spec 生成设计文档 10 10
    Design Review 设计复审 10 10
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 10 10
    Design 具体设计 10 20
    Coding 具体编码 500 700
    Code Review 代码复审 5 5
    Test 测试(自我测试,修改代码,提交修改) 5 5
    Reporting 报告 10 15
    Test Repor 测试报告 5 5
    Size Measurement 计算工作量 5 5
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 5 10
    合计 1285 1815

    4.解题思路描述与设计实现说明

    • 网络接口的使用
      • 按照所给的网络接口进行连接
      • 将接收到的数据,使用正则表达式,转化成合适自己代码的数据
      • 将自己代码运行后得到的数据,转换成合适的形式,使用网络接口,传回
    • 代码组织与内部实现设计(类图)

    • 说明算法的关键与关键实现部分流程图
      • 算法的关键是进行组合和筛选
      • 关键实现部分流程图

    5.关键代码解释

    def cmb(list0):
        list1 = list0.copy()
        iter1 = itertools.combinations(list1, 5)
        for tup0 in iter1:
            listc = list(tup0)
            list1 = list0.copy()
            for i in range(5):
                list1.remove(listc[i])
            iter2 = itertools.combinations(list1, 5)
            for tup1 in iter2:
                liste = list(tup1)
                list2 = list0.copy()
                for i in range(5):
                    list2.remove(listc[i])
                for i in range(5):
                    list2.remove(liste[i])
                a = score(listc, 5)
                b = score(liste, 5)
                c = score(list2, 3)
                if (a >= b) and (b >= c):
                    s[1] = a + 2 * b + 3 * c
                    if s[1] > s[0]:
                        s[0] = s[1]
                        global result
                        result.clear()
                        for k in range(3):
                            result.append(list2[k])
                        for k in range(5):
                            result.append(liste[k])
                        for k in range(5):
                            result.append(listc[k])
    
    

    我这一段代码采用组合的方法,即先从13张牌中随机选出5张,再从剩下的8张牌中选出5张,最后剩下3张。找出所有的情况,再进行判断,选出符合规则的组合方式,给从从选出比较好的方式。

    6.性能分析与改进

    • 在刚开始设计AI的实现方法时,我想过使用贪心算法,先找到5张组合在一起最大的牌,放在底墩,再找5张第二大的牌,放在中墩,最后三张放在头墩。这样就符合规则了,但是这种情况下选出的牌,赢得概率不大,就放弃了这种思路,改用组合的方法。
    • 性能分析图
    • 其中消耗最大的函数是我用来进行组合操作和筛选操作的cmb()函数(在上面我已经展示了),而且消耗第二大的函数score()函数和它相差不大,因此我就展示一下我的score()函数,这个函数是来为每一种组合中的每一墩给分的
    def score(list, m):
        if m == 5:
            f = tonghuashun(list)
            if f:
                return 100000+f*700
            f = zhadan(list)
            if f:
                return 90000+f*700
            f = hulu(list)
            if f:
                return 80000+f*700
            f = tonghua(list)
            if f:
                return 70000+f*0.000007
            f = shunzi(list)
            if f:
                return 60000+f*700
            f = santiao(list)
            if f:
                return 50000+f*700
            f = liandui(list)
            if f:
                return 40000+f*7
            f = erdui(list)
            if f:
                return 30000+f*7
            f = duizi(list)
            if f:
                return 20000+f*700
            f = sanpai(list)
            if f:
                return 10000+f*0.000007
        elif m == 3:
            f = tonghuashun(list)
            if f:
                return 100000+f*0.07
            f = tonghua(list)
            if f:
                return 70000+f*0.07
            f = shunzi(list)
            if f:
                return 60000+f*700
            f = santiao(list)
            if f:
                return 50000+f*700
            f = duizi(list)
            if f:
                return 20000+f*700
            f = sanpai(list)
            if f:
                return 10000+f*0.07
    

    7.单元测试

    import unittest
    import shisanshui
    
    
    class MyTestCase(unittest.TestCase):
        def test_sanshunzi(self):
            list0 = shisanshui.list0
            result = shisanshui.sanshunzi(list0)
            self.assertEqual(result, 1)
    
    
    if __name__ == '__main__':
        unittest.main()
    
    • 这是用来测试是否是三顺子这种特殊牌型的测试代码,
    • 测试数据的构造思路
      • 选择了5顺子和3顺子有交叉部分,另一个5顺子则与它们没有交叉,其中三顺子在前和在后这两种情况都有,
      • 选择了两个5顺子有交叉部分,3顺子与它们没有交叉部分
      • 选择三个顺子都有交叉部分的各种情况

    8.贴出Github的代码签入记录

    9.UI展示

    视频地址

    • 登录界面

    • 注册界面

    • 主页

    • 出牌界面

    • 历史对局

    • 排行榜

    • 对局详情

    10.遇到的代码模块异常或结对困难及解决方法(8分)

    • 问题描述
      • 反复尝试页面跳转不出来,有时页面跳转后里面的按钮和内容全都消失。
      • 一点击页面就闪崩或退出
      • 有时会跳出无关页面,用户体验差
      • API不会调用,经常性报错。
      • 出牌不会做,正在努力。
    • 做过哪些尝试
      • 页面一直显示不出来,更换了窗口类型,甚至于后面直接推翻重来。
      • 百度查找资料,b战看视频,向大佬请教
      • 借鉴别人的代码,在别人的基础上模仿改进,解决一些问题。
    • 是否解决
      • 基本解决,出牌还是不会。
    • 有何收获
      • 学习QT5应该多借鉴一些其他资料,不要局限于部分教程。
      • 熬夜是真真真伤身体。
      • 提升自己审美,比起之前的设计好很多了。
      • 代码能力还是有待改进,应持续学习,及时补缺补漏。

    10.评价你的队友

    • 值得学习的地方
      -提前学习相关技术,为敲代码做好准备,能够认真完成AI部分,平常十一多点睡的经常肝到一点。
    • 需要改进的地方
      -需要持续提升自己,能力方面不全面,需要补齐短板

    11.学习进度条

    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 300 300 10 10 学会了java和墨刀的使用
    2 50 350 10 15 学习python的使用
    3 200 550 12 27 学习QT5
    4 150 700 8 35 学习QT5
  • 相关阅读:
    如何成为一个合格的数据架构师?
    证道:零售企业如何借助数据智能提升人效?| 数智加速度10课回顾
    终于,数据中台成为3000万企业的增长引擎
    凯德中国 × 阿里云 × 奇点云 | 沉淀数据资产,遇见数智未来
    追风:数据中台如何驱动全域消费者运营?| 数智加速度09课回顾
    何夕:跟上趋势,拥抱全域数据中台 | 数智加速度08课回顾
    南弈:释放数据价值的「三个关键点」 | 数智加速度07课回顾
    百然:智能算法如何落地商业化?| 数智加速度06课回顾
    星魁:管理数据资产的「五步骤」与「六要素」 | 数智加速度05课回顾
    pytest系列(四)- pytest+allure+jenkins
  • 原文地址:https://www.cnblogs.com/wangerfu/p/11675843.html
Copyright © 2011-2022 走看看