第二次结对编程作业

各个链接

姓名 博客链接 本作业博客的链接 Github项目地址
张万聪 https://www.cnblogs.com/a8-23/ https://www.cnblogs.com/a8-23/p/11585265.html https://github.com/a-spring-bear/13
刘诗琳 https://www.cnblogs.com/slyn0422/ https://www.cnblogs.com/slyn0422/p/11681213.html https://github.com/a-spring-bear/13

具体分工

我们没有明确的分工,大部分都是我们相互讨论实现的。但我主要负责前端,我的好搭档负责的是算法,啊我好菜。


PSP表格

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

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

  • 网络接口的使用

提供的接口说明了传送方式,查资料、问学长、经历各种幽暗昏惑终于明白是要用Ajax实现。根据request要得到response,才算是请求成功,害我好菜。

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

我们做的web,所以前端使用了HTML。HTML是从Axure Rp 8(一股神秘力量)导出的,导出的项目中一个HTML对应一个css文件,在导出的基础上我们做了相应的补充和调整。另外添加了Js文件来封装项目中使用的函数。

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

    • 算法的关键:

      • 采用了贪心算法,先为三墩找最优解,再为二墩找最优解,最后剩下的三张就是一墩;在判别牌型时,也是优先判断较大的牌型
      • 采用分桶的方式进行统计,分别统计了每种牌型的数量、每种牌号的数量等
      • 几种普通牌型的判别方法:
        • 同花顺:先找是否有多于5张的花色,若有,将所有可能的顺子都存在example中,并按从大到小的顺序排放,将该花色的牌去重复、排序,再进行比对;同时,还要附上相应权值,因为可能存在多幅同花顺。
        • 炸弹:从大到小,找出牌数大于等于4张的牌号,若有,直接获取,再到cards中去匹配牌型(由于贪心算法,此时已不用考虑同花顺)
        • 葫芦:先按贪心算法,找出最大的三张相同牌号的牌,在卡片集合中剔除这三张,再继续找最大的对子
          - 同花:找出所有牌数大于等于5的花色,分别列出每个花色的所有牌号,从大到小排序,根据每个花色最大的牌号为他们赋权值,最后选权值最大的。
          - 顺子:与同花顺类似,但是example是和所有排序、去重复的牌相比对。
          - 三条:直接在数字桶中寻找牌数等于3的牌号(根据贪心算法推理,若有则只有一个)
          - 二对:直接在数字桶中寻找两个牌数等于2的牌号,最后一张牌取剩下的最大的那张
          - 一对:直接在数字桶中寻找牌数等于2的牌号(根据贪心算法推理,若有则只有一个),散牌牌号大优先取
    • 部分流程图:

  • 类图


关键代码解释

  • 重要的/有价值的代码片段

    分桶过程:

特殊牌型判断:

普通牌型判断:

理牌过程:

  • 解释:见代码注释

性能分析与改进

  • 改进的思路

用Axure Rp 8导出HTML文件夹,在文件夹的项目中调整css使见面更加美观并符合使用习惯。但是界面做的还是不够美观,第一次着手自己做一个项目的HTML界面,还有很多经验上的不足,日后要加强学习啊!各种调整都是暴力的、笨拙的,导致可能界面显示会有浏览器的兼容和适配问题。连接算法执行出牌,算法我们的时间不够,写的并不完善还有很多情况没有考虑,后期会继续加以补充。增加作业提供的接口js文件,发出请求的异常情况没有考虑周全。

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

    • 性能分析图

  • 程序中消耗最大的函数:marshal loads

单元测试

  • 项目部分单元测试代码、 测试的函数

特殊牌型的判断、普通牌型的判断的代码和函数

普通牌型判断:

  • 构造测试数据的思路

分别按照特殊牌型、普通牌型的同花顺、同花、顺子、炸弹、葫芦、三条、二对、一对、散排的组合,给每种可能的牌型进行测试。

  • 数据:

    • 部分输出:

    "*6 &6 $10,&3 &4 &8 &9 &10,#5 #8 #9 #J #Q"

    "$J &K *K,&4 *4 #5 &5 *8,$3 #3 *3 #7 $A"

    "*2 #K &K,&3 4 #6 $6 &6,6 #7 $8 $9 $10"

    "$2 *6 *10,#4 #7 #9 #10 #A,&4 &7 &10 &J &A"

    "*6 &6 $10,&3 &4 &8 &9 &10,#5 #8 #9 #J #Q"

    "*2 #K &K,&3 4 #6 $6 &6,6 #7 $8 $9 $10"

    "$2 *6 *10,#4 #7 #9 #10 #A,&4 &7 &10 &J &A"

    "#2 $2 $6 $8 *8 $9 #9 *9 $Q &Q *A &A $A"

    "5 #10 $A,2 $8 *8 #K *K,#3 $4 &Q #Q *Q"

    "*3 #3 &A,$2 *2 4 #Q &Q,6 #10 &10 $10 #K"


贴出Github的代码签入记录


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

  • 困难(这是一个故事,我要连在一起说,呜呜呜...)

    • 代码模块异常:在Ajax上面花的时间太多了,在登陆上一直有“400”的状态码。在这上面我们花了很多的时间,很久,很久,很久,很久,然后发现我们根本没有注册...(我嘤嘤嘤)于是我们开始弄注册的接口,当注册接口完成之后,登录的问题就解决了。但是但是但是,为什么有了登录接口还需要一个登录验证接口啊喂,得到的token总是失效的导致没办法得到授权,报错报错报错,无止尽的报错。后来在阴差阳错无止尽的调试最后解决了这个问题。另外还有算法的设计,实在是太多情况了,这道题太难了我不会做,呜呜呜,这个问题是正处于,并将长期处于的一个大问题(嘤)。

    • 结对的困难:在于沟通交流方面,进度有点不太对接的上,但是后面多沟通多磨合就解决啦!

  • 收获:

    • 每次做完作业的总结几乎都是提升了自己的搜索能力。啊,搜索引擎,这伟大的发明。

    • 自己又学会了一点点点之前没有接触过的东西。

    • 一坨我掉下的头发而已。

    • 沟通真的很重要,自己思维的死角可能在别人的一条无比光明平坦的道路。


评价你的队友

  • 值得学习的地方

耐心、灵活、脑洞大、效率高,给我很大的鼓励和各方面的支持。

  • 需要改进的地方

严厉控诉!头发太多了!分给我一点!


代码规范

gitignore

徽章

readme

UI设计

百度网盘:

链接:https://pan.baidu.com/s/1Y85ZxURVxTOvUy6iQw-Xxg
提取码:ooyb

学习进度条

第N周 新增代码行数 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
1 90 90 14 14 学会了一点Eclipse的基本使用
2 40 130 2 16 熟悉了PS、Axure Rp、和一点点Python
3 600 630 35 51 熟练了HTML、Webstorm,会用了css和js啦
posted @ 2019-10-12 12:52  one_song  阅读(133)  评论(1编辑  收藏  举报