zoukankan      html  css  js  c++  java
  • 第二次结对编程作业

    作业博客链接 https://www.cnblogs.com/venb/p/11672891.html 

    同学博客链接https://www.cnblogs.com/swh1148318751/p/11679697.html

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

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

    UI展示

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

    分工

      陈文彬 负责出牌ai的设计编程,苏伟欢 负责ui的设计编程。

    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

    public class Network {
        public static Api api;
        public static void init() {
            HttpLoggingInterceptor logging = new HttpLoggingInterceptor(System.out::println);
            logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
            OkHttpClient client = new OkHttpClient.Builder()
                    .addInterceptor(logging)
                    .build();
            Retrofit retrofit = new Retrofit.Builder()
                    .addConverterFactory(MoshiConverterFactory.create())
                    .baseUrl("https://api.shisanshui.rtxux.xyz/")
                    .client(client)
                    .build();
    
            api = retrofit.create(Api.class);
        }
    }
    • 代码组织与内部实现设计

    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发送网络请求

  • 相关阅读:
    [SHOI2014]信号增幅仪
    [SDOI2016]征途
    Luogu P3226 [HNOI2012]集合选数
    Comet OJ C1076 [Contest #4]求和
    Luogu P2657 [SCOI2009]windy数
    Luogu P1864 [NOI2009]二叉查找树
    UVA10559 Blocks
    Luogu P1880 [NOI1995]石子合并
    简单DP
    CF1097F Alex and a TV Show
  • 原文地址:https://www.cnblogs.com/venb/p/11672891.html
Copyright © 2011-2022 走看看