杨蓝婷博客链接
王焱博客链接
项目地址
UI演示
具体分工
- 杨蓝婷:原型图的设计和前端
- 王焱:前端和算法的设计
PSP表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
60 |
60 |
Estimate |
估计这个任务需要多少时间 |
300 |
310 |
Development |
开发 |
320 |
320 |
Analysis |
需求分析(包括学习新技术) |
460 |
470 |
Design Spec |
生成设计文档 |
20 |
20 |
Design Review |
设计复审 |
360 |
370 |
Coding Standard |
代码规范(为开发制定合适的规范) |
40 |
40 |
Design |
具体设计 |
710 |
720 |
Coding |
具体编码 |
430 |
430 |
Code Review |
代码复审 |
320 |
320 |
Test |
测试(自我测试,修改,提交修改) |
430 |
430 |
Reporting |
报告 |
30 |
30 |
Test Report |
测试报告 |
30 |
30 |
Size Measurement |
计算工作量 |
20 |
20 |
Postmortem & Process Improvement Plan |
事后总结并提出过程改进计划 |
30 |
30 |
|
合计 |
3560 |
3600 |
解题思路描述与设计实现说明
网络接口的使用
- 利用AFNetWorking进行封装的网络请求类,用POST或GET请求接口获得数据
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
progress:(void (^)(NSProgress * _Nonnull))uploadProgress
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
{
NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"POST" URLString:URLString parameters:parameters uploadProgress:uploadProgress downloadProgress:nil success:success failure:failure];
[dataTask resume];
return dataTask;
}
代码组织与内部实现设计
![](https://img2018.cnblogs.com/blog/1793134/201910/1793134-20191015200836408-1011140973.png)
说明算法的关键与关键实现部分流程图
- 拿到手牌后先进行处理,记录各个花色,并且统计手上各个牌型的情况,分类。
- 然后遍历,进行散牌、对子、三顺、炸弹和特殊牌型的排序判断(特殊牌型直接输出)。
关键代码
List<Card> continuous1=new ArrayList<Card>(); //三同花顺
List<Card> continuous2=new ArrayList<Card>();
int t=-1,f1=-1;
for(int i=0;i<4;i++)
{
ArrayList<Card> type=new ArrayList<Card>();
for(Card c:handCard)
if(c.type==i+1)
type.add(c);
for(int j=0;type.size()>=5&&j+4<type.size();j++)
if(iscontinuous(type.subList(j, j+5)))
{
continuous1=type.subList(j,j+5); //一组同花顺
t=i;
f1=j;
}
}
for(int i=0;(i<t+1)&&(!continuous1.isEmpty());i++)
{
ArrayList<Card> type=new ArrayList<Card>();
for(Card c:handCard)
if(c.type==i+1)
type.add(c);
for(int j=0;type.size()>=5&&j+4<type.size();j++)
{
if(i==t)
{
if(j+4<f1)
if(iscontinuous(type.subList(j, j+5)))
continuous2=type.subList(j,j+5);
}
else
{
if(iscontinuous(type.subList(j, j+5)))
continuous2=type.subList(j,j+5);
}
}
}
性能分析与改进
- 如果能直接判断特殊牌型就无需再做麻烦的权重判断,直接输出。
- 记录各个组合牌(散牌、对子、三条、炸弹等)的个数,利用不同数组存放。
- 根据规则后墩>中墩>前墩,只需要判断出最大和次大的两墩。
- 性能分析图
![](https://img2018.cnblogs.com/blog/1793134/201910/1793134-20191015204505805-1446017701.png)
![](https://img2018.cnblogs.com/blog/1793134/201910/1793134-20191015210848826-338196415.png)
单元测试
![](https://img2018.cnblogs.com/blog/1793134/201910/1793134-20191015205919806-366176032.png)
![](https://img2018.cnblogs.com/blog/1793134/201910/1793134-20191015205931498-191882494.png)
贴出Github的代码签入记录
![](https://img2018.cnblogs.com/blog/1793134/201910/1793134-20191015210220307-1326393358.png)
遇到的代码模块异常或结对困难及解决方法
- 对于算法的流程和前后端交互不明白,踩了很多坑。
- 去b站上疯狂学习。
- 部分解决
- 极大的提升了自学能力和熬夜能力。
评价你的队友
- 婷部tql,UI大佬值得学习。
- 少熬夜,身体重要。
学习进度条
第N周 |
新增代码(行) |
累计代码(行) |
本周学习耗时(小时) |
累计学习耗时(小时) |
重要成长 |
1 |
0 |
0 |
12 |
12 |
更加熟悉原型开发工具(ps nb) |
2 |
0 |
0 |
25 |
27 |
学习算法,了解强化学习和神经网络的基本算法后放弃并且忘记。 |
3 |
1000 |
1000 |
30 |
58 |
瞎写算法,瞎写前端。 |
4 |
200 |
1200 |
15 |
72 |
优化算法,强行上线。 |