• 第二次结对编程作业


    1、链接


    结对同学的博客链接https://www.cnblogs.com/qq291713624/p/11681362.html

    本作业博客的链接https://www.cnblogs.com/wzxzx/p/11676583.html

    Github地址

    2、具体分工

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

    3、psp表格

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

    4、解题思路

    (1)网络接口的使用
    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

  • 相关阅读:
    VS2010-MFC(Ribbon界面开发:创建Ribbon样式的应用程序框架)
    VS2010-MFC(图形图像:GDI对象之画刷CBrush)
    VS2010-MFC(图形图像:GDI对象之画笔CPen)
    VS2010-MFC(图形图像:CDC类及其屏幕绘图函数)
    VS2010-MFC(字体和文本输出:文本输出)
    VS2010-MFC(字体和文本输出:CFont字体类)
    VS2010-MFC(MFC常用类:MFC异常处理)
    矩阵快速幂
    Codeforces 510C (拓扑排序)
    UVA10305 Ordering Tasks
  • 原文地址:https://www.cnblogs.com/wzxzx/p/11676583.html
Copyright © 2020-2023  润新知