第二次结对编程作业
链接
分工
张婉怡:主要负责出牌算法以及界面的美化。
阮君曦:负责各种功能的设计和实现。
PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 :明确需求和其他因素,估计以下任务需要多少时间 | 30 | 30 |
Estimate | 估计这个任务需要多少时间 | 30 | 30 |
Development | 开发(包含下面8个子任务) | 2160 | 2520 |
Analysis | 需求分析(包括学习新技术) | 240 | 300 |
Design Spec | 生成设计文档 | 50 | 60 |
Design Review | 设计复审 | 30 | 20 |
Coding Standard | 代码规范(为开发制定合适的规范) | 100 | 120 |
Design | 具体设计(用伪代码,流程图等方法来设计具体模块) | 500 | 560 |
Coding | 具体编码 | 840 | 1000 |
Code Review | 代码复审 | 100 | 130 |
Test | 测试(自我测试,修改,提交修改) | 300 | 200 |
Reporting | 报告 | 170 | 130 |
Test Report | 测试报告 | 60 | 40 |
Size Measurement | 计算工作量 | 50 | 40 |
Postmortem & Process Improvement Plan | 事后总结并提出过程改进计划 | 60 | 50 |
合计 | 2390 | 2710 |
解题思路与设计说明
- 网络接口使用
POST
GET
- 代码组织与内部实现设计(类图)
- 说明算法的关键与关键实现部分流程图
算法的关键点主要就是按照人理牌的方法来的,从大到小,先将最大的牌拿出来,再从剩下的牌里寻找最大的牌。这个想法基本满足大多数牌型。有些关键点是:对于葫芦,炸弹,两对的情况下,他们都需要附带牌讲五张凑满,那么应该从剩余的牌中优先选择最小的牌,这样使得前墩能够更大。以下是AI算法的大致内容。
关键代码解释
List<int> FourNum = cardList.GroupBy(p => p % 100).Where(p => p.Count() >= 4).Select(p => p.Key).ToList();
List<int> ThreeNum = cardList.GroupBy(p => p % 100).Where(p => p.Count() >= 3).Select(p => p.Key).ToList();
List<int> TwoNum = cardList.GroupBy(p => p % 100).Where(p => p.Count() >= 2).Select(p => p.Key).ToList();
这是C#中的lamda表达式,这种表达式的作用可以用简短的语句查找出你想要的东西。例如第一条语句,即可查找出该list集合里是否存在炸弹,有的话就将他们复制到FourNum这个list集合里,后面的语句同理。
性能分析与改进
-
改进思路
- 将经常使用到的代码段进行封装,将他们统一封装到类中,利用静态类的机制,我们每次要用到这些代码的时候就可以直接调用方法了。
- 对于算法的改进:一开始没有考虑到连对的机制,因为平常玩的时候没有这个机制,因此这个算一个改进吧。对于葫芦,炸弹,两对的情况,我一开始只是在剩余的牌中随便分配牌给它们,导致小的墩会变得更小,因此改进后将剩余牌中最小的分配给他们,这样能使得最终牌型更大些。
-
展示性能分析图和程序中消耗最大的函数
单元测试
Github的代码签入记录
模块异常或结对困难及解决方法
- 问题描述:代码能力太弱,基本要求大多都看不懂
- 做过的尝试:肯定先把要求弄懂= =,尝试用java swing制作ui。(以及搜索别人的十三水源码)
- 有何收获:学会了基本的ui制作,然后发现自己的自学能力有点差,做很多无用功,学不到重点,得多尝试。
评价队友
阮君曦
- 值得学习的地方
- 太多值得学习的,不论是学习态度还是代码能力学习能力都很优秀,典型的带躺选手,当他队友怪不好意思的。
- 需要改进的地方
- 共同改进部分吧,就是没怎么沟通。
学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) |
---|---|---|---|---|
1 | 0 | 0 | 5 | 5 |
2 | 500 | 500 | 15 | 20 |
2 | 1000 | 1500 | 35 | 55 |
2 | 1200 | 2700 | 30 | 85 |