第二次结对编程作业
一、结对博客信息:
二、具体分工
- 前端:陈天恒,用unity设计十三水界面和交互
- 后端:张火标,负责算法设计
三、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 50 | 70 |
Estimate | 估计这个任务需要多少时间 | 1025 | 1160 |
Development | 开发 | 0 | |
Analysis | 需求分析(包括学习新技术) | 50 | 70 |
Design Spec | 生成设计文档 | 45 | 40 |
Design Review | 设计复审 | 5 | 10 |
Coding Standard | 代码规范(为开发制定合适的规范) | 0 | 0 |
Design | 具体设计 | 700 | 800 |
Coding | 具体编码 | 0 | 0 |
Code Review | 代码复审 | 0 | 0 |
Test | 测试(自我测试,修改,提交修改) | 0 | 0 |
Reporting | 报告 | 150 | 140 |
Test Report | 测试报告 | 0 | 0 |
Size Measurement | 计算工作量 | 5 | 0 |
Postmortem & Process Improvement Plan | 事后总结并提出过程改进计划 | 20 | 30 |
合计 | 1025 | 1160 |
四、解题思路描述与设计实现说明
1.网络接口的使用
后端(张火标):
登入
开局
出牌
前端(陈天恒):采用的是JavaScript的jQuery进行网络请求,在登陆的时候把token和user_id存入本地,其它的要调用token时再从本地取出,要调用token的地方有历史战绩和历史战绩详情和开始游戏界面。
- 注册接口
- 登陆接口
- 注销接口
- 历史战绩接口
2.代码组织与内部实现设计(类图)
类 | 作用 | 思路 |
---|---|---|
Main | 负责调配多个类,以及进行网络请求。 | 主类进行调配网络请求,获得牌,然后通过juedge_best类来的得到最有的牌 |
juedge_best | 负责将得到的牌组合出最好的组合 | 本质上属于遍历每一种可能的组合,然后通过自己制定的规则,来判断哪一个组合的赢面最大。 |
API(接口) | 关于网络请求的多种不同类型的请求的接口 | 里面写了注册,登陆,开启战局,出牌的请求方式。 |
Login | 是发送登陆网络请求的请求体 | 一个请求体的类,有一个int和一个String |
Login_return | 是网络请求的返回体(登陆) | 得到String status,data{int id,String token} |
open_retrun | 是返回开启战局之后,得到的返回体,有牌的详细情况 | 也是一个实体类 |
Submit | 发送牌的网络请求 | 一个实体类。 |
Submit_return | 网络请求的返回体的类。用来观察要不要 | 一个实体类,有牌局是否合理的信息 |
3.说明算法的关键与关键实现部分流程图
- 算法部分
五、关键代码解释
重要的/有价值的代码片段
- 排序函数(张火标):
def paixu(list): temp=[] length=len(list) for i in range(length): if list[i][1] == 'A': temp.append(list[i]) for i in range(length): if list[i][1] == 'K': temp.append(list[i]) for i in range(length): if list[i][1] == 'Q': temp.append(list[i]) for i in range(length): if list[i][1] == 'J': temp.append(list[i]) for i in range(length): if list[i][1] == '1': temp.append(list[i]) for i in range(length): if list[i][1] == '9': temp.append(list[i]) for i in range(length): if list[i][1] == '8': temp.append(list[i]) for i in range(length): if list[i][1] == '7': temp.append(list[i]) for i in range(length): if list[i][1] == '6': temp.append(list[i]) for i in range(length): if list[i][1] == '5': temp.append(list[i]) for i in range(length): if list[i][1] == '4': temp.append(list[i]) for i in range(length): if list[i][1] == '3': temp.append(list[i]) for i in range(length): if list[i][1] == '2': temp.append(list[i]) return temp
- 黑桃函数(张火标)其他颜色也是类似
def heitao(mypai): "黑桃列表" heitaolist=[] for i in range(len(mypai)): if mypai[i][0]=='$': heitaolist.append(mypai[i]) return heitaolist
- XXX(陈天恒)
XX(陈天恒):
- 排行榜核心:
- 战绩详情
六、性能分析与改进
1.改进的思路
消耗最大的函数是网络请求所消耗的,这个有点难改进。
算法开始的时候考虑不是很周全,比如连队就没考虑到。
然后对于一些特殊情况,可以先提前判断,可以减少消耗。
2.展示性能分析图和程序中消耗最大的函数
七、单元测试
- 用的是Junit4
- 先进行本地测试:
- 进行网络登陆测试:
- 进行开启战局测试:
- 出牌测试:
八、Github的代码签入记录
- 前端可执行文件的签入(陈天恒)
[img] 后端算法代码签入(张火标)
[img]
[img]九、遇到的代码模块异常或结对困难及解决方法
张火标(后端)
1.
问题描述:在排序时卡主了,输出一直为空
做过哪些尝试:查找一下我是否对python语句的误解,再看看程序有没有问题
解决方法:换了一种想法,比较通俗一点的做法。成功。
有何收获: 对于解决问题更有信心了2.
问题描述:对于python并不熟悉,接口方面没接触过
做过哪些尝试:自己查找网络资源,向同学请教
是否解决:解决了
有何收获: 笨鸟真的要先飞才行
陈天恒(前端)
1.
问题描述:X
做过哪些尝试:X
是否解决:X
有何收获:X2.
问题描述:X
做过哪些尝试:X,
是否解决:成功解决
有何收获:掌握了接口的使用方法
十、评价你的队友
张火标对陈天恒
- 值得学习的地方
- 对一个问题能够一直探寻,直到解决为止。
- 还有值得学习的地方就是,对于一个新的知识能够一直坚持的看下去,一直去吸收这一方面的内容,是让我觉得自己不足的地方,非常值得我去学习。
- 需要改进的地方
- 应该尽可能地不要通宵,少熬夜。
陈天恒对张火标
- 值得学习的地方
- 从国庆就开始打代码,较早开始准备,而我比较迟才开始学习前端,我应该向他学习早点开始准备。他不断完善代码,坚持不懈,从开始学习到现在花了两周左右,有困难就继续努力,这种精神很值得我学习。
- 需要改进的地方
- 算法可能不够复用性不够好,下次可以改进一下
十一、学习进度条
- 后端(张火标)
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 0 | 0 | 6 | 6 | 上手Axure RP,了解原型设计 |
2 | 600 | 600 | 15 | 21 | 写算法 |
3 | 200 | 800 | 8 | 29 | 学习网络接口的使用 |
- 前端(陈天恒)
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 0 | 0 | 6 | 6 | 上手Axure RP,了解原型设计 |
2 | 0 | 0 | 20 | 26 | 看视频学习HTML+CSS+JS |
3 | 1170 | 1170 | 50 | 76 | 写前端的网站和交互,学会接口的使用 |