waaany

第二次结对编程作业

链接

队友博客
我的博客
Github

分工

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

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

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

posted on 2019-10-14 13:27  waaany  阅读(171)  评论(4编辑  收藏  举报

导航