第二次结对编程作业
1、链接
- 队友博客:https://www.cnblogs.com/cheslee/p/11676958.html
- 后端算法github地址:https://github.com/cheslee15/031702245
- 前端github地址: https://github.com/wtnlo-O/13water
- UI视频链接:https://pan.baidu.com/s/1KwZuDFRj7ks39fk037h-OA
2、具体分工
- UI:许钰梅
- AI:李钒效
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
- 连接排行榜的接口,当成功时,将从服务器传回来的数据进行处理,把每一组数据取出放在表格的一行上,直到遍历完成。
- 开始游戏需要将服务器返回来的牌数据处理,并将所对应的牌的图形插入到相应容器上,完成对牌的接受和显示。
代码组织与内部实现设计(类图)
说明算法的关键与关键实现部分流程图
- 关键代码段:
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、遇到的代码模块异常或结对困难及解决方法
-
我: 对于前端的基础基本没有,所有的知识都要从新学起,开头的学习较为困难,学到后面发现涉及的东西越来越多,短时间内无法也学习得很深入,知识掌握得并不多。在之后使用接口时也是一脸懵,不懂如何下手。 没有前端这方面的知识,只知道大概的学习方向,一开始的几天就大致地把HTML、CSS和JS的教程看了一遍,但是记不住,之后只好边写边查。对于接口由最开始一无所知的状态到现在的稍微了解稍微会用也是经历了一段坎坷的路程。现在已经大致了解掌握前端很基础的知识,磨磨蹭蹭的游戏大概界面也做出来了,对于接口目前也学会了一种使用方法。掌握了前端一些基础知识,稍微了解了一下接口的使用,感觉可以发展的技能又多了一些。
-
队友:在此次编程中,首先拿到题目后毫无头绪,不知从何下手。前端后端都需要学习很多的东西,在算法编程过程前,一开始连游戏规则都弄不懂,队友们于是相约一起玩扑克牌,在对规则熟悉后慢慢开始规划如何实现算法。在编程过程中,思路也很容易卡壳,于是在稿纸上先画出了流程图,再开始实现代码,后来很多次测试代码也一直出现问题,于是一直修改测试修改测试修改......后来大部分问题得到了解决,在此次作业之前,写一个算法题可能对大部分人不是什么困难的事情,但这次的任务,需要调用接口实现前后端的连动等等,对小白来说这也太难了吧。总之,巨累,但收获更多,加油吧!
10、评价你的队友
- 完成作业比较迅速,比较积极,做的工作量比较多,做完自己的那部分也帮帮队友,nice!帮助前端写了很多接口,辛苦队友了! 要改进的地方可能就只是我们各自能力的部分吧,争取以后能把作业完成的更好!
11、学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 200 | 200 | 20 | 20 | 文本匹配和分类 |
2 | 0 | 200 | 10 | 30 | Axure Rp8原型设计工具 |
3 | 500 | 700 | 30 | 60 | 前段知识和前后端联动 |