# #博客链接
本次分工
张婉怡:主要负责出牌算法以及界面的美化。
阮君曦:负责各种功能的设计和实现。
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的方法使用
因为要多次调用到API接口,因此把这些封装成类的静态成员方法。这样每次调用接口只需要传参数即可,减少了代码的冗余度。
代码组织与内部实现设计(类图)
- 以下的类属性为窗体,方向线和注释表明了他们的关系
- 以下为本次程序所用的所有类(非窗体类)
说明算法的关键与关键实现部分流程图
算法的关键点主要就是按照人理牌的方法来的,从大到小,先将最大的牌拿出来,再从剩下的牌里寻找最大的牌。这个想法基本满足大多数牌型。有些关键点是:对于葫芦,炸弹,两对的情况下,他们都需要附带牌讲五张凑满,那么应该从剩余的牌中优先选择最小的牌,这样使得前墩能够更大。以下是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签入记录
遇到的代码模块异常或结对困难及解决方法
1.阮君曦
- 问题描述:
- (已解决)因为要做图形化界面,一开始不知道用什么好,因为在暑假期间接触过c#的winform来做一些简单的小程序,但是因为没学过UI不知道如何把他们二者结合,因此纠结很久,最终死马当活马医,丑就丑咯。
- (已解决)winform自带的界面真的毫无突出点,我就在网络上找到了一些已经封装好的winform可以使用的皮肤控件(dskin),虽然效果一班,但会比自带的好一些,微软官方也有皮肤控件(metroFramework),效果还可以吧?
- (已解决 )对于API接口传回来的json格式一开始不知道如何处理,经过查找资料,发现c#自带json格式的处理函数,用起来非常方便,用foreach循环即可遍历里面的东西。(foreach是真的强大!)
- (已解决)单元测试太难了,winform项目我没有找到对应的单元测试,因此就用了另外一个控制台项目来进行人工测试了。。。
- 做过那哪些尝试
- 一开始想过用java,但是java的swing感觉太难用了,没有winform那么舒服,就放弃了java。
- 有何收获
- 写bug和debug的能力有所提升。。(写的是代码,其实是bug)
- 团队协作真的很重要,良好的沟通可以让项目进展提速。
- 一开始觉得为什么要画流程图,觉得很没有必要,但这次从头到尾画了一次,感觉对整个软件的思路和框架清晰了很多,而且在此过程中也可以理清代码逻辑,加快开发效率。
2.张婉怡
评价你的队友
张婉怡
- 值得学习的地方
- 婉怡值得学习的地方太多了,比如有求必应,我一有问题就会找他帮忙,马上便得到反馈;比如把GitHub上我不会弄得东西给弄好了......中国好队友!
- 需要改进的地方
- 写bug能力有点弱,希望提升(狗头)。。