• 第二次结对编程作业


    第二次结对编程作业

    作业博客链接https://www.cnblogs.com/swh1148318751/p/11679697.html

    同学博客链接 https://www.cnblogs.com/venb/p/11672891.html

    fork仓库地址:https://github.com/venbbb/ThirteenWater

    我的仓库地址:https://github.com/suweihuan079243/UI.git

    分工

      陈文彬 负责出牌ai的设计编程

      苏伟欢 负责ui的设计编程(其实没有)。

    UI

    链接: https://pan.baidu.com/s/16Mk_pd572VO1kvn9OqviBQ 提取码: fy58 

    PSP表格

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

     20

    20

    · Estimate

    · 估计这个任务需要多少时间

     10

    10

    Development

    开发

     1000

     1200

    · Analysis

    · 需求分析 (包括学习新技术)

     500

     600

    · Design Spec

    · 生成设计文档

     20

     20

    · Design Review

    · 设计复审

     20

     20

    · Coding Standard

    · 代码规范 (为目前的开发制定合适的规范)

     10

     10

    · Design

    · 具体设计

    360

     360

    · Coding

    · 具体编码

     1000

     1200

    · Code Review

    · 代码复审

     60

     60

    · Test

    · 测试(自我测试,修改代码,提交修改)

     120

     240

    Reporting

    报告

     60

     60

    · Test Repor

    · 测试报告

     20

     20

    · Size Measurement

    · 计算工作量

     10

     10

    · Postmortem & Process Improvement Plan

    · 事后总结, 并提出过程改进计划

     30

     30

    · 合计

     3240

     3860

    解题思路描述与设计实现

    • 网络接口的使用

      使用Retrofit网络请求库,才用异步方式发送网络请求。参考:https://www.jianshu.com/p/a3e162261ab6

    • 代码组织与内部实现设计

    Algorithm类
    Operation 对牌型进行判断并出牌
    Resort 对所给的牌从小到大进行排列
    Dealer 发牌员类,进行发牌
    Player 玩家类,进行看牌,出牌
    Net类
    Network  创建 Retrofit 实例
    创建 网络请求接口实例 并 配置网络请求参数
    NetworkTest 发送网络请求并提交数据
    LoginReponse 存储接收登录返回的数据
    OpenReponse 存储接收开启战局返回的数据
    ReigisterReponse 存储接收注册返回的数据
    SubmitReonse 存储接收提交返回的数据
    SubmitRequest 存储向服务器发送的数据
    UserDto 存储用户登录信息
    • 算法的关键与关键实现部分流程图 

        1.要对向服务器请求返回的手牌进行从小到大重新排列。

        2.通过统计单牌,双牌,三牌,四牌的数量来进行对牌型的判断。

        

    关键代码解释

      

    /**
         * 把花色去掉,统计牌型
         * a1的值为手牌中重复一次(单张牌)的牌,a2的值为手牌中重复二次(对牌)的牌,
         * a3的值为手牌中重复三次(三张)的牌,a4的值为手牌中重复四次(炸弹)的牌。
         */
    
    public void countPoker(ArrayList<String> handPoker)
        {
            countColor(handPoker);
            for(String str : handPoker){
                str = str.substring(1);
                numList.add(str);
            }
            int index = 0;
            while (true) {
                if ( index < numList.size() - 3 && numList.get(index).equals(numList.get(index + 3)) ) {
                    a4.append(numList.get(index));
                    index = index + 4;
                } else if (index < numList.size() - 2 && numList.get(index).equals(numList.get(index + 2))) {
                    a3.append(numList.get(index));
                    index = index + 3;
                } else if (index < numList.size() - 1 && numList.get(index).equals(numList.get(index + 1))) {
                    a2.append(numList.get(index));
                    index = index + 2;
                } else {
                    a1.append(numList.get(index));
                    index = index + 1;
                }
                if (index >= 13) break;
            }    

    性能分析与改进

      存在的问题:  

        1.后墩有时候小于中墩  如 后墩10 10 10  6 6 ,中墩A A A 5 5

        2.只能从散排中判断顺子的满足条件,不能拆牌。

      改进思路:

        1.对每种牌型赋予一个价值,来判断后墩和中墩的大小问题。

        2.暂时没有思路。

      性能分析图:

    单元测试

    package game;
    
    import org.junit.jupiter.api.Test;
    
    import java.util.ArrayList;
    
    import static org.junit.Assert.assertEquals;
    import static org.junit.jupiter.api.Assertions.*;
    
    class outTest {
    
        @Test
        void resort() {
            String str = "&K &6 $J &10 *2 &2 $A *6 *K #3 *10 #K #2";
            ArrayList<String> test = new ArrayList<>();
            test = out.resort(str);
            ArrayList<String> result = new ArrayList<>();
            assertEquals("[*2, &2, #2, #3, &6, *6, &¥, *¥, $J, &K, *K, #K, $A]",test.toString());
        }
    }

    测试Resort函数

    Github的代码签入记录

     遇到的代码模块异常或结对困难及解决方法

    • 问题描述:不知道UI设计应该用写什么比较好;不知道要怎么用API, 申请网络请求。
    • 做过哪些尝试:pygame,javafx,web; OKhttp,HttpURLConnection,Retrofit。
    • 是否解决:是。
    • 有何收获:学会怎么使用API,申请网络请求。了解了UI界面的编写。

    评价你的队友

    • 值得学习的地方:认真负责
    • 需要改进的地方:太完美了。

    学习进度条

      

    第N周

    新增代码(行)

    累计代码(行)

    本周学习耗时(小时)

    累计学习耗时(小时)

    重要成长

    1

    300

    300

    20

    20

    熟悉规则,设计算法

    2

    400

    700

    18

    38

    完善算法,解决细节问题

    3

     800

     1500

     25

     63

     掌握Retrofit发送网络请求

  • 相关阅读:
    C#多线程参数传递
    Delphi单元测试工具Dunit介绍
    使用javascript生成文件
    Windows自动登录源码
    [Win32]一个调试器的实现
    用MASM写一个简单的实现递归操作的汇编程序,所谓递归,上课已经跟大家说清楚了,如果我们只考虑简单的只分一次的递
    C#多线程编程(4)多线程与UI操作
    在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载) .
    delphi 中几种多线程操作方式
    C#实现WEB服务器
  • 原文地址:https://www.cnblogs.com/swh1148318751/p/11679697.html
Copyright © 2020-2023  润新知