第二次结对编程作业

作业博客链接 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发送网络请求

posted @ 2019-10-15 19:06  venb  阅读(296)  评论(5编辑  收藏  举报