第二次结对编程作业

匆匆过客 提交于 2019-12-01 09:53:16

# #博客链接

本次分工

张婉怡:主要负责出牌算法以及界面的美化。

阮君曦:负责各种功能的设计和实现。

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能力有点弱,希望提升(狗头)。。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!