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

    1、博客链接,Github项目地址

    031702439陈舒洋

    031702431陈明磊

    Github项目地址

    2、具体分工

    • 前端:陈舒洋,设计十三水界面和交互
    • 后端:陈明磊,负责算法设计

    3、PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 50 70
    Estimate 估计这个任务需要多少时间 1500 1600
    Development 开发 0
    Analysis 需求分析(包括学习新技术) 50 70
    Design Spec 生成设计文档 45 40
    Design Review 设计复审 5 10
    Coding Standard 代码规范(为开发制定合适的规范) 0 0
    Design 具体设计 700 800
    Coding 具体编码 0 0
    Code Review 代码复审 0 0
    Test 测试(自我测试,修改,提交修改) 0 0
    Reporting 报告 150 140
    Test Report 测试报告 0 0
    Size Measurement 计算工作量 5 0
    Postmortem & Process Improvement Plan 事后总结并提出过程改进计划 20 30
    合计 2000 2100

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

    • 网络接口的使用

      注册绑定接口:

      登录接口:

      开局接口:

      提交接口:

      战局详情接口:

      历史战绩接口:

      排行榜接口:

    • 代码组织与内部实现设计

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

      算法的关键:

      很普通的算法,没有什么思想,主要还是遍历吧,找到最好的牌,由于数学不是很好,对于权值的应用一窍不通,所以就随便设了下权值,保证不出现“相公”的情况

      代码思想:

      先将拿到的手牌处理成列表,方便后续的处理,然后获取后墩的所有牌型,再接着遍历后墩所有牌型,其次遍历中墩所有牌型,算出每种牌型的权值,最后得出最大权值的牌型,就是我们要找的牌型,由于权值设置的问题,找到的牌型并不一定事最优解

    5、关键代码解释

    • 贴出你认为重要的/有价值的代码片段,并解释

    • 这是算法实现的关键部分,当获得所有后墩牌型时,需要遍历所有牌型,再这一部分,算法实现了保证不会出现‘相公’的牌型和减少牌型遍历次数,大大减少了遍历时间,做到精确TOP1,不过由于静态权值的设定没有数学理论支撑,所以找到的最优牌型不一定是理论最优解

    6、性能分析与改进

    • 描述你改进的思路

      - 改进的思路:
      - 改进时可以采用更具有逻辑,更科学性的算法思想进行编程,做好精细的流程图的设计,力求没有累赘。
      - 判断牌型的时候把时间的因素也考虑进去,在追求正确结果的基础上,尽量简化代码,消除不必要的循环的部分,将代码向时间方向进行改进。
      - 判断出了牌型之后,简化对牌型的处理的步骤。
      - 确定了要存放的牌后进行前中后三墩的赋值,只要赋值之后就不存在再覆盖数据的情况,使得时间的浪费更少。
      - 简化输入输出的部分,之前为了答案的正确性,将这两个部分做的比较复杂,现在可以适当的简化一些

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

      赋值前中后三墩这三个数组的函数最大,由于它们是存放结果的数组,对于它们的赋值,覆盖的操作比较频繁。
      判断各个牌型的函数消耗都不小,由于只考虑了正确性没有考虑时间,判断牌型基本上都是多次的遍历牌面数组,以力求获取的牌型正确

    7、单元测试

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

      输入

      ```
      $8$Q2#8$7&A8&2#2#6&5$2$6
      &K$29#2#KA&J$10#10#Q#4$9#A
      &23$K&9&810&J#10$25#J#3#9
      $2$8#Q&8&9&A$K
      J&K$10#5$A10
      810&9&3&A$7
      K$2$Q#KA$J&8
      $9
      2$639*7&4$Q&3&K$7&5&Q
      ```

      输出

      ```
      ['$7 $Q &A', '#6 $6 $8 #8 8', '2 &2 #2 $2 &5']
      ['$2 *9 $9', '$10 &J #Q &K *A', '#2 #4 #10 #K #A']
      ['&J #J $K', '&2 $2 3 #3 &8', '5 &9 #9 *10 #10']
      ['#5 &8 &A', '&9 *10 *J #Q &K', '$2 $8 $10 $K $A']
      ['&8 *K #K', '$2 &3 $7 &A A', '8 &9 *10 $J $Q']
      ['$Q &Q &K', '&3 *7 $7 $9 9', '2 *3 &4 &5 $6']
      ```
      随机生成牌,再自己和AI一起玩,对比自己和AI出的牌的不同,改进权值。

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

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

    • 困难描述:在牌的算法上思路不太清晰。
    • 解决尝试:打了几把13水
    • 是否解决:是
    • 有何收获:打13水的技术有所提升

    10、评价你的队友

    • 评价队友->陈舒洋

    • 值得学习的地方:舒洋同学的打牌水平很高,同样是零基础学习,他学习进度比我快很多,学习能力很强。

    • 需要改进的地方:少搓一点炉石(滑稽)

    • 评价队友->陈明磊

    • 值得学习的地方:明磊同学不仅牌技好,人也好,学习努力,人也帅

    • 需要改进的地方:少学一点,多注重养生(滑稽)

    11、学习进度条

    • 后端(陈明磊)
    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 7 7 学习Axure RP
    2 600 600 15 22 写算法
    3 200 800 8 30 学习网络接口的使用
    • 前端(陈舒洋)
    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 6 6 学习Axure RP
    2 0 0 20 26 学习HTML+CSS+JS
    3 1000 1170 30 56 写前端的网站和交互
  • 相关阅读:
    c# 深拷贝与浅拷贝
    SQLServer性能优化 .net开发菜鸟总结
    Ajax自定义无刷新控件实现
    APScheduler库的详细用法
    catkin在centos中的安装
    第五次任务实现与项目总结第六组
    Javascript教程:获取当前地址栏url
    窗口处理问题
    HTML中area标签
    Asp.net中Frameset的使用小结
  • 原文地址:https://www.cnblogs.com/gkd666/p/11768153.html
Copyright © 2011-2022 走看看