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

    1、链接

    结对同学的博客链接

    本作业博客的链接

    Github地址

    2、具体分工

    王钟贤:负责本次作业的算法实现
    许煌标:负责ui的设计及实现,网络接口
    

    3、psp表格

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

    4、解题思路

    (1)网络接口的使用

    网络接口是我第一次接触的,一开始实在弄不出来,后来发现永福大佬的api竟然提供生成代码的功能,永福是真的牛逼啊!

    login:
    url = "https://api.shisanshui.rtxux.xyz/auth/login"
    text={"username":username,"password":password}
    payload = json.dumps(text)
    headers = {'content-type': 'application/json'}
    response = requests.request("POST", url, data=payload, headers=headers)
    
    register:
    url = "https://api.shisanshui.rtxux.xyz/auth/register"
    text = {"username": username, "password": password}
    payload = json.dumps(text)
    headers = {'content-type': 'application/json'}
    response = requests.request("POST", url, data=payload, headers=headers)
    
    game/open:
    url = "https://api.shisanshui.rtxux.xyz/game/open"
    headers = {'x-auth-token': token }
    response = requests.request("POST", url, headers=headers)
    
    game/submit:
    url = "https://api.shisanshui.rtxux.xyz/game/submit"
    text={"id":id,"card":card}
    payload = json.dumps(text)
    headers = {
        'content-type': "application/json",
        'x-auth-token': token
        }
    response = requests.request("POST", url, data=payload, headers=headers)
    
    rank:
    url = "https://api.shisanshui.rtxux.xyz/rank"
    response = requests.request("GET", url)
    
    history:
    url = "https://api.shisanshui.rtxux.xyz/history"
    querystring = {"page": "0", "limit": "100", "player_id": user_id}
    headers = {'x-auth-token': token}
    response = requests.request("GET", url, headers=headers, params=querystring)
    
    history/{id}:
    url = "https://api.shisanshui.rtxux.xyz/history/%s" % (number)
    headers = {'x-auth-token': token}
    response = requests.request("GET", url, headers=headers)
    
    (2)代码组织与内部实现(类图)

    主要就是card和handcard两个类以及若干处理牌型的函数,具体代码组织如上图所示。

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

    算法实现关键:将三墩分为第一墩和非第一墩进行不同的处理,如流程图所示判断各类牌型,将所判断出来的牌型从手牌中抽出,并补齐不足数目的牌(如炸弹,判断出有4张一样的牌,将这四张牌抽出,再补一张其他牌)

    5、关键代码解释

    代码中使用一个类的数组来表示当前的手牌,数组下标表示牌的值,J当作11,Q当作12,K当作13,A当作14,并在类里用s,d,h,c代表某一花色的有无(s代表梅花*,d代表红心&,h代表黑桃$,c代表方块#),num代表牌的值为n的牌有num张。

    算法中采用补牌,如果此类牌型数量小于当前墩所要求的牌型数量,则补牌,直至二者相等。补的牌没有要求,因为除散牌外其余的牌型大小皆与补的牌无关。


    6、性能改进与分析

    改进思路:去掉了权值的比较,每次从手牌中找最大的牌(虽然这样三墩合起来不一定是最优解)
    image
    性能分析如上图所示,程序中消耗最大的函数是system


    7、单元测试

    此处以测试同花顺的函数为例,输入一组数据,将里面的同花顺提取出来,若无,则不输出,若有多个,则先输出较大的。测试数据选择,一、数据需包含所有牌型的情况;二、一样的数据调换牌的顺序测试多次。


    8、代码签入记录

    image

    目前GitHub上的commit信息如上,后续也将会实时更新。


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

    • 问题描述:
    1. 在使用Python实现网络接口时,因为是第一次接触网络接口,使用起来出现各种问题,如失败报错处理、token认证问题。没有进行代码模块异常处理的话,一旦网络接口报错,整个进程会直接结束运行,非常难受,然后还不知道具体哪里炸了。token认证主要是在传递url、payload、headers的时候字符串处理问题,要把变量传递进去,而不能传递成字符串。
    2. 使用pyqt实现ui界面时,每个窗口是一个单独的py文件,而各个窗口之间要进行传值(如token、user_id等),每个变量在单独函数中产生的变化不能直接传递给其他窗口,就会导致token认证已获得,却传不到对局、战局记录当中去,得到的是空值,然后就导致网络接口失败然后报错然后结束运行。我太难了
    3. 使用pyqt的过程中非常痛苦,因为这个的教程非常少,很多细节问题很少人遇到,遇到了但去问的人就更少,而看到问题的大佬也不一定想回答的,我哭了很多控件的具体功能都是没有完整的教程的,只能一个个具体的功能去找。
    4. 当然最困难的问题就是时间问题以及本身太菜了。
    • 做过哪些尝试:先是百度自救一下,对于Python的字符串、列表、字典等的处理有了更深入的学习,一些问题自救失败后尝试询问同学大佬们。
    • 是否解决:最终还是有惊无险的解决了各类问题,也是有够痛苦的。
    • 有何收获:收获可太多了嗷,一学分的课能学到这么多东西也真是有够赚的呢!
      主要就是针对这些问题学会了很多以前所不懂的知识,在以后遇到这类问题也就有了一定的经验。也是第一次接触这么完整的去实现一个前端后端结合起来的项目,遇到的困难越多也就代表成长越多。也是再次挑战成功了自己的熬夜能力和自学能力了。

    10、评价你的队友

    • 值得学习的地方:我的队友贤哥很强,特别是理论知识,这是我最希望能学习到的一面,他对理论知识的掌握、以及各个方面、不同课程相联系的知识体系都很清楚,谈起来简直就是章口就来啊。不像我基本学了就忘,每次需要的时候还得花时间重新去温习甚至重新学习一遍,太难受了,也太不该了。希望不止这段结队时间,在以后也都能不断向他学习。
    • 需要改进的地方:我的队友啥都好就是熬夜能力实属是个臭弟弟,漫漫长夜不能一起奋斗肝代码,真是不太彳亍。
    王钟贤
    • 值得学习的地方:我的队友很努力,每天都学习到很晚才睡,能够较快地掌握新知识并应用,这一点是我觉得最值得我学习的地方。
    • 需要改进的地方:我的队友实在太忙了,很难有时间一起讨论问题。

    11、学习进度条

    第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
    1 0 0 5 5 学习原型设计工具和简单的Python实现图形界面
    2 500 500 10 15 基于贪心算法完成基础的算法
    3 1100 1600 20 35 对算法进行收尾和检测,完成前端ui部分

    12、ui部分gif展示

    链接: https://pan.baidu.com/s/1GKx19-gmv4u1oOPeEkI8gA 提取码: 275y

  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/qq291713624/p/11681362.html
Copyright © 2011-2022 走看看