zoukankan      html  css  js  c++  java
  • 第二次结对编程作业

    杨蓝婷博客链接

    王焱博客链接

    项目地址

    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张牌 调用算牌接口,再调用打牌接口。


    贴出Github的代码签入记录

    遇到的代码模块异常或结对困难及解决方法

    • 对于算法的流程和前后端交互不明白,踩了很多坑。
    • 去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 优化算法,强行上线。
  • 相关阅读:
    DS博客作业06--图
    DS博客作业05--树
    DS博客作业04--树大作业说明
    DS博客作业02--栈和队列
    DS博客作业01--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    DEVC怎么建工程
    C语言博客05--指针
    201771010110孔维滢《面向对象程序设计(java)》第十二周学习总结
  • 原文地址:https://www.cnblogs.com/wangyan0904/p/11680016.html
Copyright © 2011-2022 走看看