第二次结对编程作业

队友博客链接:

2.分工

  • AI:李钒效
  • UI:许钰梅

3.psp表格

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

4.设计说明

  • 网络接口的使用


使用原生$.ajax()的方法,用POST向API发送请求并返回数据

$.ajax()使用方法:https://blog.csdn.net/Ha_Girl/article/details/90710491

  • 连接排行榜的接口,当成功时,将从服务器传回来的数据进行处理,把每一组数据取出放在表格的一行上,直到遍历完成。

  • 开始游戏需要将服务器返回来的牌数据处理,并将所对应的牌的图形插入到相应容器上,完成对牌的接受和显示。

代码组织与内部实现设计(类图)(6分)

  • 算法关键

  • 关键代码段:
    for x in number:
        if x == 2:
            ar[2] = ar[2] + 1
        if x == 3:
            ar[3] = ar[3] + 1
        if x == 4:
            ar[4] = ar[4] + 1
        if x == 5:
            ar[5] = ar[5] + 1
        if x == 6:
            ar[6] = ar[6] + 1
        if x == 7:
            ar[7] = ar[7] + 1
        if x == 8:
            ar[8] = ar[8] + 1
        if x == 9:
            ar[9] = ar[9] + 1
        if x == 10:
            ar[10] = ar[10] + 1
        if x == 11:
            ar[11] = ar[11] + 1
        if x == 12:
            ar[12] = ar[12] + 1
        if x == 13:
            ar[13] = ar[13] + 1
        if x == 14:
            ar[14] = ar[14] + 1  # 对拿到的poker进行桶排
        for x in fuhao:
            if x == '$':
                 ab[0] += 1
            elif x == '&':
                 ab[1] += 1
            elif x == '*':
                 ab[2] += 1
            elif x == '#':
                 ab[3] += 1
  • 算按法设计的主体思路,是将拿到的字符串,分为单个元素,再将每个元素的花色和大小分开存入两个数组
  • 接下来遍历存放花色的数组,判断其值来确定是否是同花色
  • 遍历存放数字的数组,判断其值是否大于等于1来找到相应的牌型

5.关键代码解释

for i in card:
        f = i[0]
        fuhao.append(f)
        if i[1] == "J":
            number.append(11)
        elif i[1] == "Q":
            number.append(12)
        elif i[1] == "K":
            number.append(13)
        elif i[1] == "A":
            number.append(14)
        elif i[1:] == "10":
            number.append(10)
        else:
            number.append(int(i[1]))  #将J,Q,K,A转换为数字放到数组
  • 本题需要把‘J,Q,K,A’转换为数字之后存到数组识别

6.性能分析与改进

  • 对函数进行分析,显然自己代码的瓶颈是在于无脑。这样虽然可以比较方便,或者说比较偷懒,但是的的确确给自己的程序性能带来了很大的影响。
  • 对数组便利的情况可能会超时
  • 改进:可以采用贪心算法,从所有牌里找到最大的一墩作为后墩,然后从剩下的牌里继续找下去

7.单元测试

控制台输入:
[*2 #3 &5 &5 *6  &7 *9 $9 *10 $J *Q $Q #A]
控制台输出:
[*2 #3  $J,&5 &5 *6  &7 *10 ,*Q $Q $9 *9 #A]

  • 异常:查找顺子时候,应为是对排序过的数组进行查找,在判断数字数组是否连续五个元素的值大于等于1时,可能出现对子或三条之类连续的情况,所以需要判断后一张牌是否与前一张牌大小相等
  • 改进:
 if s[20] == 1:
            bb[2] = ""
            bb[2] = str(bb[2]) + str(card[t])
            for x in ar[2:6]:
                if card[t + 1] == card[t]:
                    t += 1
                else:
                    bb[2] = str(bb[2]) + ' ' + str(card[t + 1])
                    t += 1

8.Github代码迁入记录

9.遇到的困难及解决办法:

  • 我:在此次编程中,首先拿到题目后毫无头绪,不知从何下手。前端后端都需要学习很多的东西,在算法编程过程前,一开始连游戏规则都弄不懂,队友们于是相约一起玩扑克牌,在对规则熟悉后慢慢开始规划如何实现算法。在编程过程中,思路也很容易卡壳,于是在稿纸上先画出了流程图,再开始实现代码,后来很多次测试代码也一直出现问题,于是一直修改测试修改测试修改......后来大部分问题得到了解决,在此次作业之前,写一个算法题可能对大部分人不是什么困难的事情,但这次的任务,需要调用接口实现前后端的连动等等,对小白来说这也太难了吧。总之,巨累,但收获更多,加油
    吧!

10.队友评价

一开始我和队友对于前端一无所知,队友选择了做前端,后来很惊喜的给我看到了前端的成果,界面还有据说不是很简单拖拽功能,nice!在结对过程中,两个人如果再多一些讨论,可能会完成更好的作品!

11.学习进度条:

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
1 200 200 20 20 文本匹配和分类
2 0 200 10 30 Axure Rp8原型设计工具
3 500 700 30 60 前段知识和前后端联动
原文地址:https://www.cnblogs.com/cheslee/p/11676958.html