第二次结对编程作业
组队成员:031702630吴友昆,031702616 林涛
一、链接
二、具体分工
- 林涛:UI、接口
- 吴友坤:AI
三、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
Estimate | 估计这个任务需要多少时间 | 10 | 20 |
Development | 开发 | 3000 | 4000 |
Analysis | 需求分析 (包括学习新技术) | 1000 | 1000 |
Design Spec | 生成设计文档 | 40 | 60 |
Design Review | 设计复审 | 20 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
Design | 具体设计 | 30 | 30 |
Coding | 具体编码 | 600 | 800 |
Code Review | 代码复审 | 30 | 50 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 60 |
Reporting | 报告 | 30 | 30 |
Test Repor | 测试报告 | 30 | 20 |
Size Measurement | 计算工作量 | 20 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 4910 | 6190 |
四、解题思路描述与设计实现说明
1.网络接口的使用:
- 注册:post 数据到:https://api.shisanshui.rtxux.xyz,通过返回状态码判断是否注册成功,处理用户已存在
- 登录 post 数据到:https://api.shisanshui.rtxux.xyz,通过返回状态码判断是否登录成功,得到token存在localStorage;
- 排行榜:get json:https://api.shisanshui.rtxux.xyz/rank/rank.json 为了美观只显示了前五名
- 出牌 post 数据到https://api.shisanshui.rtxux.xyz/game/submit
- 开局 token放响应头 post 数据到https://api.shisanshui.rtxux.xyz/game/open
2.代码组织与内部实现设计
3.算法的关键与关键实现部分流程图
-
算法思路:
先用两个列表,一个列表存放列表形式的牌组,如["&3, $2 ,*3 ,&2, #2"],另一个列表存放数字列表,记录每张牌出现的频率,之后按照牌型的大小分配rank点数,用来保证分墩准确性。
之后用递归列出所有553牌型,再筛选出牌型不符合规范的组合后,记录牌型权值和最大组合牌组,遍历完所有递归后,挑出最大值输出。 -
流程图:
五、关键代码解释
- 后端使用flask框架接收前端信息
from flask import Flask
from flask import request
from flask_cors import CORS
import json
app = Flask(__name__)
@app.route('/test')
def test():
global list_3,list_51,list_52,card_list,card_list_str
data = request.get_json()
card_str = data["card"]
card_list_str=card_str.split(' ')
init_card()
六、性能分析与改进
七、单元测试
- 测试例子
poker: $5 #2 #10 &7 $8 *8 &4 $Q &2 *10 #K #9 $6
{
"id": 61597,
"card": [
"&4 #K *8",
"&2 $Q #10 #2 *10",
"$5 &7 $8 #9 $6"
]
}
poker: $J &4 *7 &7 *K $3 *Q *2 $10 &8 $2 &5 #K
{
"id": 61527,
"card": [
"$2 $10 *2",
"*Q *7 &7 &8 &5",
"$J &4 *K $3 #K"
]
}
poker: #7 &3 $4 #6 &4 $2 *6 &8 *3 #Q &2 #2 *10
{
"id": 61616,
"card": [
"*10 &4 $4",
"*6 &8 #Q #6 #7",
"&3 $2 *3 &2 #2"
]
}
八、Github的代码签入记录
九、遇到的代码模块异常或结对困难及解决方法
前端:
-
困难:不知如何实现接口。
-
解决方法:学习js。
-
困难:页面板块设计不好看。
-
解决方法:审美问题。
后端:
- 困难:算法结构混乱,调试起来繁琐
解决方法:重构部分函数,聚合功能函数
十、评价你的队友
- 林涛:自学能力强,很好地完成任务,算法思维不错。
- 吴友昆:做得不错,对接也弄得挺好,有责任心,肯肝。
十一、学习进度条
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 0 | 0 | 14 | 14 | 学习了Axure Rp9 |
2 | 400 | 400 | 20 | 34 | 学习了HTML、CSS |
3 | 1000 | 1400 | 30 | 64 | 学习了Javascript |