第二次结对编程作业

关于结对同学

王焱博客链接
杨蓝婷博客链接
项目地址
UI演示

具体分工

  • 杨蓝婷: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|优化算法,强行上线。|

posted @ 2019-10-14 22:07  Ann826  阅读(147)  评论(4编辑  收藏  举报