一、一些地址及分工
①队友博客链接
②本人博客链接
③Github项目地址
④具体分工
林青霞:UI
徐祖豪:AI
二、 PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟 |
Planning | 计划 | 20 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 420 | |
Development | 开发 | 0 | |
· Analysis | · 需求分析 (包括学习新技术) | 60 | 60 |
· Design Spec | · 生成设计文档 | 30 | 20 |
· Design Review | · 设计复审 | 20 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | ||
· Design | · 具体设计 | 360 | 400 |
· Coding | · 具体编码 | 0 | |
· Code Review | · 代码复审 | 0 | |
· Test | · 测试(自我测试,修改代码,提交修改) | 0 | |
Reporting | 报告 | 40 | 60 |
· Test Repor | · 测试报告 | 20 | 40 |
· Size Measurement | · 计算工作量 | ||
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 40 |
· 合计 | 580 |
三、 解题思路描述与设计实现说明
思路主要就是尽可能找到每一墩的最大的情况
接口使用
算法的接口主要使用了永福提供的注册接口、登录验证接口、开启战局接口和出牌接口
注册:
import http.client conn = http.client.HTTPSConnection("api.shisanshui.rtxux.xyz") payload = "{\"username\":\"username\",\"password\":\"password\"}" headers = { 'content-type': "application/json" } conn.request("POST", "/auth/register", payload, headers) res = conn.getresponse() data = res.read() //拿到服务器的回应
登录:
conn.request("POST", "/auth/login", payload, headers) res = conn.getresponse() data = res.read()//拿到服务器的回应 //data里的token和user_id都是后面开启战局需要的
开启战局:
headers = { 'x-auth-token': "token" } conn.request("POST", "/game/open", headers=headers) res = conn.getresponse() data = res.read()
使用token可以从服务器拿到一组牌,之后就是运行算法得出结果,再将结果发回服务器
payload = result headers = { 'content-type': "application/json", 'x-auth-token': token } conn.request("POST", "/game/submit", payload, headers) res = conn.getresponse() data = res.read()
代码组织与内部实现设计
部分流程图
四、关键代码解释
在找到中墩或者底墩之后,记录剩余牌的数组将会发生变化,为了防止同一张牌出现两次影响后面的判断,所以被一次都要更新cnt、all和rcd三个数组num_rcd=list(set(num_rcd).difference(set(down))) #更新num_rcd #更新num_all i=0 while i<5: x = down[i] num_all[x] = 0 i+=1 #更新num_cnt i=0 while i<5: x = int(down[i]/4) num_cnt[x]-=1 i+=1 break
五、 性能分析与改进
①改进思路
②性能分析图
六、 单元测试
七、 Github的代码签入记录
History for 031702634/ShiSanShui.py
Commits on Oct 15, 2019
接口的应用和使用list的bug修复
@xzhcode
xzhcode committed 35 minutes ago
Update ShiSanShui.py
@xzhcode
xzhcode committed 10 hours ago
Commits on Oct 14, 2019
Update ShiSanShui.py
@xzhcode
xzhcode committed 2 days ago
Commits on Oct 13, 2019
Create ShiSanShui.py
@xzhcode
xzhcode committed 2 days ago
八、困难及解决办法
- 问题描述
问题1、怎么描述一张牌
问题2、list 列表的append和+=用法不同导致结果列表里面会含有子列表 - 做过哪些尝试
问题1、一开始是想用类的方法描述,后面发现python没有结构体这个数据结构,自己构建又太麻烦,随意就把2-A的牌按花色不同排序,赋予0-51的值,使用NUM_ALL数组记录模拟牌
问题2、当判断可能存在一种牌型时,会使用列表来保存这个可能,如果这个可能的牌大于一张,且是使用append方法加入列表的,这个牌型可能就会存在小的列表,列表中的子列表是不能被迭代,这样在迭代时就会报错。后面改用+= 添加列表中的元素,问题解决。 - 是否解决
问题1、解决
问题2、解决 - 有何收获
加深了对于python语言的list数据结构的认识,而且本次作业大部分时间都在改bug,对于代码的异常调试也有了一些经验
九、 评价你的队友
- 值得学习的地方
做作业很积极,态度很认真,对于项目出现的问题在交流之后很快就能得到回应且想出解决方法。 - 需要改进的地方
多学习新技术
十、 学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
1 | 0 | 0 | 20 | 20 | 熟悉Axure RP用法 |
2 | 95 | 95 | 5 | 25 | 对牌进行分类 |
3 | 101 | 296 | 5 | 30 | 判断牌型 |
4 | 273 | 569 | 20 | 55 | 出牌策略、调试、改bug |