链接
张雨同学博客链接
宋娟同学博客链接
GitHub仓库链接1
GitHub仓库链接2
具体分工
刚开始我们非常迷茫,所以我们没有非常明确的分工,大家一起讨论,做难受了就对换看看……
说实话这样效率不高,但是有人在旁边一起的感觉和一个人学习是不一样的
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 60 | 80 |
Estimate | 估计这个任务需要多少时间 | 5 | 5 |
Development | 开发 | 1000 | 1100 |
Analysis | 需求分析 (包括学习新技术) | 500 | 550 |
Design Spec | 生成设计文档 | 20 | 30 |
Design Review | 设计复审 | 15 | 15 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 15 |
Design | 具体设计 | 300 | 350 |
Coding | 具体编码 | 600 | 800 |
Code Review | 代码复审 | 120 | 180 |
Test | 测试(自我测试,修改代码,提交修改) | 180 | 120 |
Reporting | 报告 | 30 | 30 |
Test Repor | 测试报告 | 100 | 30 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 30 |
合计 | 2950 | 3255 |
解题思路描述与设计实现说明
网络接口的使用
主要是参考python中requests库的post请求
例如调用登录的接口:
conn = http.client.HTTPSConnection("api.shisanshui.rtxux.xyz")
payload = json1_idmm
headers = {'content-type': "application/json"}
conn.request("POST", "/auth/login", payload, headers)
res = conn.getresponse()
data = res.read()
代码组织与内部实现设计
算法的关键与关键实现部分流程图
根据各个牌型的权值计算每一墩的得分(以后墩为例)
if cards_order[type_old[2]] < cards_order[type_new[2]]:
if type_new[2] == '同花顺':
profit += 5
elif type_new[2] == "炸弹":
profit += 4
else:
profit += 1
elif cards_order[type_old[2]] > cards_order[type_new[2]]:
if type_new[2] == '同花顺':
profit -= 5
elif type_new[2] == "炸弹":
profit -= 4
else:
profit -= 1
else:
res = 0
card1 = cards_type(old['xiadun'])
card2 = cards_type(new['xiadun'])
if card1[0] == '两对':
if card1[1] in [['2', '3'], ['3', '4'], ['4', '5'], ['5', '6'], ['6', '7'], ['7', '8'], ['8', '9'],
['9', '10'], ['10', 'J'], ['J', 'Q'], ['Q', 'K'], ['K', 'J']]:
if card2[1] in [['2', '3'], ['3', '4'], ['4', '5'], ['5', '6'], ['6', '7'], ['7', '8'], ['8', '9'],
['9', '10'], ['10', 'J'], ['J', 'Q'], ['Q', 'K'], ['K', 'J']]:
res1 = cards_cmp(card1[1], card2[1])
if res1 == 0:
res = cards_cmp(card2[2], card1[2])
else:
res = res1
else:
res = -1
else:
if card1[1] == card2[1]:
res = cards_cmp(card2[2], card1[2])
else:
res = cards_cmp(card1[1], card2[1])
elif card1[0] == '三条' or card1[0] == '葫芦' or card1[0] == '炸弹':
if card1[1] == card2[1]:
res = cards_cmp(card2[2], card1[2])
else:
res = cards_cmp(card1[1], card2[1])
else:
res = cards_cmp(old['xiadun'], new['xiadun'])
#res = cards_cmp(old['xiadun'], new['xiadun'])
if res > 0:
if type_new[1] == '同花顺':
profit += 10
elif type_new[1] == "炸弹":
profit += 8
elif type_new[1] == "葫芦":
profit += 2
else:
profit += 1
elif res < 0:
if type_new[1] == '同花顺':
profit -= 10
elif type_new[1] == "炸弹":
profit -= 8
elif type_new[1] == "葫芦":
profit -= 2
else:
profit -= 1
关键代码解释
def cards_cmp(cards1,cards2): #牌型相同比较牌面大小
card_dic = {'2':1,'3':2,'4':3,'5':4,'6':5,'7':6,'8':7,'9':8,'10':9,'J':10,'Q':11,'K':12,'A':13}
cards1 = quhuase(cards1)
cards2 = quhuase(cards2)
l = min(len(cards1),len(cards2))
for i in range(l - 1, -1, -1):
if card_dic[cards1[i]] > card_dic[cards2[i]]:
return -1
elif card_dic[cards1[i]] < card_dic[cards2[i]]:
return 1
if len(cards1) > len(cards2):#较小墩牌较大
return -1
elif len(cards1) < len(cards2):#较小墩牌较小
return 1
return 0 #牌型相等
性能分析与改进
单元测试
Github的代码签入记录
遇到的代码模块异常或结对困难及解决方法
问题描述
1、对前端开发几乎是一无所知
2、不知道如何调用技术助教给的接口,后来看到如何完成python中requests库的post请求的教程,再加上大佬的指导一步一步完成做过的尝试
请教大佬,然后听大佬说PyQt5比较好做ui,就通过看b站上面的PyQt5实战速成视频,来完成一些,然后实操中遇到问题就看CSDN上的大佬解答的是否解决
基本解决有何收获
软工实践真的是一门十分考验学习能力的科目,遇到困难的时候疯狂百度,疯狂问大佬,疯狂看教程,基本学会了PyQt5和pyinstaller的使用,以及对接口的请求和调用也多了一层理解
评价我的队友
- 值得学习的地方:我队友做事特别认真,而且学习能力也很强,初次接触PyQt能做到这样,很棒
- 需要改进的地方:哈哈哈可能下次应该早点开始做,就不用后面几天这样赶了,
国庆有点快乐
学习进度条
第N周 | 新增代码(行) | 累积代码(行) | 本周学习耗时(小时) | 累积学习耗时(小时) | 重要成长 |
1 | 0 | 0 | 10 | 10 | 第一次认识了Axure RP,并学习使用 |
2 | 200+ | 200+ | 8 | 18 | 讨论并分工,开始思考算法思路和实现方法 |
3 | 300+ | 500+ | 20 | 38 | 学习了PyQt5的使用,对UI的设计和实现有了更深的了解 |
4 | 100+ | 600+ | 40 | 78 | 学习了如何用pyinstaller进行打包,并对代码进行改进 |