第二次结对编程作业
关于结对同学
具体分工
- 杨蓝婷: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;
}
代码组织与内部实现设计(类图)
利用OmniGraffle导出的UML类图
说明算法的关键与关键实现部分流程图
分流程图
- 拿到手牌后先进行处理,记录各个花色,并且统计手上各个牌型的情况,分类。
- 然后遍历,进行散牌、对子、三顺、炸弹和特殊牌型的排序判断(特殊牌型直接输出)。
关键代码的解释
- 特殊牌型判断的部分代码如下
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);
}
}
}
性能分析与改进
描述你改进的思路
- 如果能直接判断特殊牌型就无需再做麻烦的权重判断,直接输出。
- 记录各个组合牌(散牌、对子、三条、炸弹等)的个数,利用不同数组存放。
- 根据规则后墩>中墩>前墩,只需要判断出最大和次大的两墩。
展示性能分析图和程序中消耗最大的函数
单元测试
- 随机发13张牌 调用算牌接口,再调用打牌接口。
贴出gihub的代码签入记录
遇到的代码模块异常或结对困难及解决方法
问题描述
对于算法的流程和前后端交互不明白,踩了很多坑。
做过哪些尝试
去b站上疯狂学习。
是否解决
部分解决
有何收获
极大的提升了自学能力和熬夜能力。
评价你的队友
值得学习的地方
我的队友做为服务外包实验室ios组组长,专业知识过硬,很多的问题对于他来说都so easy,总是可以很轻易的解决一些很难的问题。所以我应该向他学习多学一些专业知识,不会的问题多问他,争取有一天能自力更生。
需要改进的地方
拖延症晚期。
没有!我们伟大的ios组组长怎么可能会有缺点呢?不可能的,不存在的!
学习进度条
|第N周|新增代码(行)|累计代码(行)|本周学习耗时(小时)|累计学习耗时(小时)|重要成长|
|----|-----|-----|------|------|------|
|1|0|0|12 |12|更加熟悉原型开发工具(ps nb)|
|2|0|0|25 |27|学习算法,了解强化学习和神经网络的基本算法后放弃并且忘记。|
|3|1000|1000|30 |58|瞎写算法,瞎写前端。|
|4|200|1200|15 |72|优化算法,强行上线。|