第二次结对编程作业

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

posted @ 2019-10-15 21:56  许煌标  阅读(239)  评论(6编辑  收藏  举报