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 | 算法优化,交互,接口调试 |