第二次结对编程作业
2019-10-15 19:15 君莫笑哈哈哈 阅读(303) 评论(7) 收藏 举报第二次结对编程作业
作业博客链接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
-
代码组织与内部实现设计
| Operation | 对牌型进行判断并出牌 |
| Resort | 对所给的牌从小到大进行排列 |
| Dealer | 发牌员类,进行发牌 |
| Player | 玩家类,进行看牌,出牌 |
| 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发送网络请求 |
浙公网安备 33010602011771号