第二次结对编程作业

强颜欢笑 提交于 2019-12-01 10:24:45

1、在文章开头给出结对同学的博客链接、本作业博客的链接、你所Fork的同名仓库的Github项目地址

队友的博客:吴雅辉
队友的本次博客:
Github地址:在这里


2、给出具体分工

秋琴:交互,API,算法。

雅辉:界面,算法调试,博客。


3、给出PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Estimate ·估计这个任务需要多少时间 30 30
Development 开发 280 240
Analysis 需求分析 (包括学习新技术) 180 120
Design Spec 生成设计文档 90 100
Design Review 设计复审 10 20
Coding Standard 代码规范 (为目前的开发制定合适的规范)
Design 具体设计
Coding 具体编码
Code Review 代码复审
Test 测试(自我测试,修改代码,提交修改)
Reporting 报告 55 55
Test Repor 测试报告
Size Measurement 计算工作量 10 10
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 45 45
合计 365 325

4、解题思路描述与设计实现说明

网络接口的使用

  • 网络接口:使用的是android的Retrofit v2.0来调用接口

代码组织与内部实现设计(类图)

说明算法的关键与关键实现部分流程图

  • 我们这次的算法的一个重要思想就是:通过等级制度来制定出牌战略。通过总的等级数的大小来进行整体牌面的布局。
  • 另一个重要思想就是:挑选两副牌进行比较后出牌。两幅牌的后墩(即本次出牌中最大的)分别是读取的13张牌中可以得到的最大的牌型和次大的牌型,计算两副牌的等级,将大牌进行输出。这种想法相对于贪心方法(一直提取当前最大牌)来说,比较好的保留了“拆掉一副特别大的牌,换取两副等级同样比较高的牌”的情况。


5、关键代码解释

三个整理牌面的函数

      //牌面       int[] Cutcards(String cards){       String[] cardsplit = cards.split(" ");       int cardd[];       cardd = new int[13];       int j=0;       for(String a:cardsplit){           String c ="";           if (a.contains("J"))               c = a.replace("J","11");           else if (a.contains("Q"))               c = a.replace("Q","12");           else if (a.contains("K"))               c = a.replace("K","13");           else if (a.contains("A"))               c = a.replace("A","14");           else               c = a;           try {               cardd[j] = Integer.parseInt(c);           } catch (NumberFormatException e) {               e.printStackTrace();           }           if (cardd[j]<100){               cardd[j]=(cardd[j]/10)*100+cardd[j]%10;           }           j++;       }       return cardd;   }
      //花色       int[] getcolor(int card[]){       int color[];       int s;       color = new int[5];       for (int i=0;i<card.length;i++){           s=card[i]/100;           color[s]++;       }       return color;   }
      //数字       int[] getnum(int card[]){       int num[];       int s;       num = new int[15];       for (int i=0;i<card.length;i++){           s=card[i]%100;           num[s]++;       }       return num;   }

6、性能分析与改进

描述你改进的思路

展示性能分析图和程序中消耗最大的函数

7、单元测试

展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路

单元测试图片




8、贴出Github的代码签入记录

请合理记录commit信息


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

问题描述

  • api调用:从前没有接触这个,网上百度了也看得是很懵逼(面向百度学习失败)。

  • 算法:我们两个人对于打牌这回事可能就一个人比较上点道,但是懂得打跟会写算法真是有(fei)点(chang)困难。

  • 使用语言的选择:上次作业用唱过python的甜头之后在网上搜了一下,就开始尝试用Qt5做界面。但是尝试了两天以后,一开始遇到的是界面的背景会传给控件(子孙),并且界面背景搞进去以后显示不出来等问题。最后勉勉强强做出一个只有几个按钮的界面,与一开始Axure写的界面有很大的出入。所以我们就开始思考是不是应该换个方向。

做过哪些尝试

  • 首先是面向百度学习(学习失败),最后去问了庆焰男神。

  • 一开始的时候都不知道一整个流程要怎么下来,和队友商量了一下以后,一开始写了一个简单的框架,然后我就开始写了。写到一半的时候就卡住了,发现不太对,各个参数没有办法联系在一起。后面又详细的讨论了一下整个流程,并画出框架和流程图,以及数据的使用。

  • 国庆前的深夜尝试了各种方法(百度、随缘点击、问同学)

是否解决

  • 庆焰男神进行了详细的讲解,让我懂了一些,但是在应用方面的话还是有点不太懂用。

  • 成功写出了一个还比较满意的算法。

  • 编程语言换成了JAVA,用AS替代了Qt5。

有何收获

  • 自学能力和面向百度资料查找能力还需要好好努力啊!

  • 最后把算法写出来的时候真的觉得:有一个完整的想法和思路是多么的重要啊!

  • 当初做出换方向的决定是很正确的,有的时候还是需要有勇气去实现自己的想法吧。

  • 当百度不管用时,周围的大佬们是很好的求助对象。


10、评价你的队友

秋琴说:

值得学习的地方:在这次结对编程作业中,我们都有许多需要学习的地方,队友乐意去学习新的知识并尝试,同时主动分担一些任务来做,在算法方面,虽然我们的算法有许多的不足,但是都是我们两个讨论出来的。我需要熬夜的话,他也会陪着我熬夜。(赞!)
需要改进的地方:想了许久没想出来。每一次合作都是两个人的摩擦与碰撞,如果有需要改进的地方的话,可能自己也有部分的原因。

雅辉说:

这次的队友是优秀的秋琴学姐优点嘛就很多啊,她会很耐心教什么都不会的我、给我打个样然后让我学着写;她自己很拼,为了做好这个项目也刷新了熬夜记录;她责任心也和能力一样强,看我这么菜就真的承担了很多很难的部分(呜呜呜呜我爱她)。说到 改进的话,其实我觉得她很好不要改了吧,要是非要写一个的话,那就希望她以后除了组队以外的平时也多带带我吧。


11、学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
1 0 0 6 6 上手Axure RP,基本设计好界面
2 21 27 讨论算法如何构建,大致分工,使用PyCharm和Qt5进行编写
3 21 48 改换安卓,使用AS和IDEA进行界面制作和算法编写
4 50 98 算法优化,交互,接口调试
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!