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

    各个链接

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

    具体分工

    我们没有明确的分工,大部分都是我们相互讨论实现的。我主要写算法,聪哥主要实现前端,啊我好菜+10086。


    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文件来封装项目中使用的函数。

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

      • 算法的关键:
        1、采用了贪心算法,先为三墩找最优解,再为二墩找最优解,最后剩下的三张就是一墩;在判别牌型时,也是优先判断较大的牌型
        2、采用分桶的方式进行统计,分别统计了每种牌型的数量、每种牌号的数量等
        3、几种普通牌型的判别方法:
        - 同花顺:先找是否有多于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总是失效的导致没办法得到授权,报错报错报错,无止尽的报错。后来在阴差阳错无止尽的调试最后解决了这个问题。另外还有算法的设计,实在是太多情况了,这道题太难了我不会做,呜呜呜,这个问题是正处于,并将长期处于的一个大问题(嘤)。

      • 结对的困难:前期的分工不太明确,浪费了一点时间,但是后面解决了,虽然还是有点赶

    • 收获:

      • 每次做完作业的总结几乎都是提升了自己的搜索能力。(同上),从此成为百度小能手。

      • 学会了给代码分模块,(这个真是太重要了,不然几百行我就已经开始晕了)

      • 1+1坨掉下的头发而已。

      • 多问多查,不能老是自己钻牛角尖。


    评价你的队友

    • 值得学习的地方

    胆大心细有耐心,学东西很快,跟着聪哥稳得一匹

    • 需要改进的地方

    没有!完美队友


    代码规范

    gitignore

    徽章

    readme

    UI设计

    百度网盘:

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


    学习进度条

    第N周 新增代码行数 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 14 14 了解了前端和ui与原型设计的区别
    2 0 0 7 21 熟悉了PS、Axure Rp、Python
    3 981 981 35 56 学会一点js 和css,大致了解了一个写网页的过程,用python写了一千行代码,小菜鸡太难了
  • 相关阅读:
    Apache Thrift的简单使用
    ExternalInterface的简单使用方法
    Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 具体解释
    白话经典算法系列之六 高速排序 高速搞定
    HTML学习_01
    Codeforces Round #256 (Div. 2) A. Rewards
    activity
    自己生产签名和数字证书的方法
    Android项目目录结构
    Android程序的安装和打包
  • 原文地址:https://www.cnblogs.com/slyn0422/p/11681213.html
Copyright © 2011-2022 走看看