第二次结对编程作业
1、博客链接,Github项目地址
2、具体分工
- 前端:陈舒洋,设计十三水界面和交互
- 后端:陈明磊,负责算法设计
3、PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | 
|---|---|---|---|
| Planning | 计划 | 50 | 70 | 
| Estimate | 估计这个任务需要多少时间 | 1500 | 1600 | 
| 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 | 
| 合计 | 2000 | 2100 | 
4、解题思路描述与设计实现说明
- 
网络接口的使用 注册绑定接口:  登录接口:  开局接口:  提交接口:  战局详情接口:  历史战绩接口:  排行榜接口:  
- 
代码组织与内部实现设计 

- 
说明算法的关键与关键实现部分流程图 算法的关键: 很普通的算法,没有什么思想,主要还是遍历吧,找到最好的牌,由于数学不是很好,对于权值的应用一窍不通,所以就随便设了下权值,保证不出现“相公”的情况 代码思想: 先将拿到的手牌处理成列表,方便后续的处理,然后获取后墩的所有牌型,再接着遍历后墩所有牌型,其次遍历中墩所有牌型,算出每种牌型的权值,最后得出最大权值的牌型,就是我们要找的牌型,由于权值设置的问题,找到的牌型并不一定事最优解 

5、关键代码解释
- 
贴出你认为重要的/有价值的代码片段,并解释 
  
- 
这是算法实现的关键部分,当获得所有后墩牌型时,需要遍历所有牌型,再这一部分,算法实现了保证不会出现‘相公’的牌型和减少牌型遍历次数,大大减少了遍历时间,做到精确TOP1,不过由于静态权值的设定没有数学理论支撑,所以找到的最优牌型不一定是理论最优解 
6、性能分析与改进
- 
描述你改进的思路 - 改进的思路: 
 - 改进时可以采用更具有逻辑,更科学性的算法思想进行编程,做好精细的流程图的设计,力求没有累赘。
 - 判断牌型的时候把时间的因素也考虑进去,在追求正确结果的基础上,尽量简化代码,消除不必要的循环的部分,将代码向时间方向进行改进。
 - 判断出了牌型之后,简化对牌型的处理的步骤。
 - 确定了要存放的牌后进行前中后三墩的赋值,只要赋值之后就不存在再覆盖数据的情况,使得时间的浪费更少。
 - 简化输入输出的部分,之前为了答案的正确性,将这两个部分做的比较复杂,现在可以适当的简化一些
- 
展示性能分析图和程序中消耗最大的函数 
  赋值前中后三墩这三个数组的函数最大,由于它们是存放结果的数组,对于它们的赋值,覆盖的操作比较频繁。 
 判断各个牌型的函数消耗都不小,由于只考虑了正确性没有考虑时间,判断牌型基本上都是多次的遍历牌面数组,以力求获取的牌型正确
7、单元测试
- 
展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路 输入 ``` 
 $8$Q2#8$7&A8&2#2#6&5$2$6
 &K$29#2#KA&J$10#10#Q#4$9#A
 &23$K&9&810&J#10$25#J#3#9
 $2$8#Q&8&9&A$KJ&K$10#5$A10
 810&9&3&A$7K$2$Q#KA$J&8
 $92$639*7&4$Q&3&K$7&5&Q
 ```输出 ``` 
 ['$7 $Q &A', '#6 $6 $8 #8 8', '2 &2 #2 $2 &5']
 ['$2 *9 $9', '$10 &J #Q &K *A', '#2 #4 #10 #K #A']
 ['&J #J $K', '&2 $2 3 #3 &8', '5 &9 #9 *10 #10']
 ['#5 &8 &A', '&9 *10 *J #Q &K', '$2 $8 $10 $K $A']
 ['&8 *K #K', '$2 &3 $7 &A A', '8 &9 *10 $J $Q']
 ['$Q &Q &K', '&3 *7 $7 $9 9', '2 *3 &4 &5 $6']
 ```
 随机生成牌,再自己和AI一起玩,对比自己和AI出的牌的不同,改进权值。
8、贴出Github的代码签入记录

9、遇到的代码模块异常或结对困难及解决方法
- 困难描述:在牌的算法上思路不太清晰。
- 解决尝试:打了几把13水
- 是否解决:是
- 有何收获:打13水的技术有所提升
10、评价你的队友
- 
评价队友->陈舒洋 
- 
值得学习的地方:舒洋同学的打牌水平很高,同样是零基础学习,他学习进度比我快很多,学习能力很强。 
- 
需要改进的地方:少搓一点炉石(滑稽) 
- 
评价队友->陈明磊 
- 
值得学习的地方:明磊同学不仅牌技好,人也好,学习努力,人也帅 
- 
需要改进的地方:少学一点,多注重养生(滑稽) 
11、学习进度条
- 后端(陈明磊)
| 第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 | 
|---|---|---|---|---|---|
| 1 | 0 | 0 | 7 | 7 | 学习Axure RP | 
| 2 | 600 | 600 | 15 | 22 | 写算法 | 
| 3 | 200 | 800 | 8 | 30 | 学习网络接口的使用 | 
- 前端(陈舒洋)
| 第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 | 
|---|---|---|---|---|---|
| 1 | 0 | 0 | 6 | 6 | 学习Axure RP | 
| 2 | 0 | 0 | 20 | 26 | 学习HTML+CSS+JS | 
| 3 | 1000 | 1170 | 30 | 56 | 写前端的网站和交互 | 
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号