【软件工程】第二次结对编程作业

白昼怎懂夜的黑 提交于 2019-12-01 10:21:26

传送门

结对同学博客:

本作业博客:https://edu.cnblogs.com/campus/fzu/SE_FZU_1917_K/homework/8664

GitHub项目地址:https://github.com/qianwensea/13Water

具体分工

施金海(我):

- 原型实现,重构部分贴图设计(根据需求)
- 测试程序,进行性能分析并提出改进意见

史恩泽:

- 设计并实现算法,优化算法
- 调用网络接口
- 代码组织与内部实现

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 50 60
· Estimate · 估计这个任务需要多少时间 50 60
Development 开发 2240 3560
· Analysis · 需求分析 (包括学习新技术) 600 900
· Design Spec · 生成设计文档 40 60
· Design Review · 设计复审 30 50
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 40
· Design · 具体设计 400 450
· Coding · 具体编码 1000 1800
· Code Review · 代码复审 20 60
· Test · 测试(自我测试,修改代码,提交修改) 120 200
Reporting 报告 100 105
· Test Repor · 测试报告 30 30
· Size Measurement · 计算工作量 10 20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 55
合计 2390 3725

解题思路描述与设计实现说明

网络接口的使用:

本项目主要用到Post和Get,将网络接口的调用封装成API_Helper,当按下界面中的按钮后调用对应的网络接口进行数据传输。

代码组织与内部实现设计(类图):

一共采用了两种风格的窗体,登录和注册采用MetroForm,其他的采用CCSkinMain

比较重要的类有两个:DealCardsUser,分别用于自动分牌和存放用户各类信息。

其他的窗体则根据需要进行相应的调用与组织。

算法关键与实现部分流程图:

算法的关键在于DealCards的实现:要先将获取到的牌型转换成易于分析和处理的int型数值,之后获取所有自动牌型,根据牌型生成符合规则的最优解。

关键代码解释

/// <summary>
/// 牌面从大到小排序
/// </summary>
public static void SortCard(List<int> cards)
{
    //牌面从大到小排序
    cards.Sort((b, a) =>
    {
        int result = (a % 100) - (b % 100);
                if (result == 0)
                {
                    result = (a / 100) - (b / 100);
                }
                return result;
            });
        }

        /// <summary>
        /// 牌面从小到大排序
        /// </summary>
        public static void SortCardMinToMax(List<int> cards)
        {
            //牌面从小到大排序
            cards.Sort((a, b) =>
            {
                int result = (a % 100) - (b % 100);
                if (result == 0)
                {
                    result = (b / 100) - (a / 100);
                }
                return result;
            });
        }

将牌面转换为数字后可以更方便的进行排序,因为在十三水中A最大,所以将A指定为14;

扑克的四种花色分别对应100,200,300,400;

        /// 牌型对应如下:
        /// 1->$
        /// 2->&
        /// 3->*
        /// 4->#

牌面对100取余即可得到对应的值,之后重载sort进行排序。

性能分析与改进

测试时分别进行了注册、登录、开启战局并出牌、查询排行榜、查询历史战局详情,得到性能报告情况如下:



其中占用较大的是Forms.Application.Run()Forms.MessageBox.show(),即窗体的加载与显示和提示窗的加载与弹出,这部分属于窗体加载难以优化。其他方法的调用都在可接受的范围内,代码的性能基本上符合要求。

单元测试

GitHub代码签入记录

遇到的困难及解决方法

问题描述:

  • 对这种项目没有类似的经验,从工具的使用到项目的开发都需要重新学习。
  • 对C#没有了解,所以程序上大都是大佬队友完成的。
  • 对UI设计没有解决方案。

做过哪些尝试:

  • 调用API算法的尝试。
  • 对界面进行进一步的完善。
  • 帮助大佬队友debug

是否解决:

已解决。

有何收获:

在大佬的带领下,我只尽到了绵薄之力,不过也学习的了很多新东西。

结对项目真的很考验两个人的配合,这次真的舒服的躺了一波,内心十分不安。

评价队友

值得学习的地方:

学习速度很快,效率很高,算法很6,功能实现的很完善,解决问题很有想法,奶茶必须安排

需要改进的地方:

学慢点,我跟不上了。

学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
1 103 103 14 14 学会了十三水的玩法,对原型设计有了一定的基础;
2 400 503 10 24 了解C#各种控件的使用;
3 1313 1816 30 54 完善界面的美化工作;
4 1153 2969 22 76 对项目进行性能分析,单元测试。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!