UI百度網盤提取連接 提取碼: ehjrhtml
具體分工前端
林鎔煒python
調用api接口git
將原型轉化成UI界面github
頁面邏輯設計以及登入註冊、打牌、排行榜、歷史記錄等功能實現算法
使用工具:pyqt5編程
陳錦傑json
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | · 計劃 | 50 | 60 |
Estimate | · 估計這個任務須要多少時間 | 30 | 40 |
Development | · 開發 | 1000 | 1200 |
Analysis | · 需求分析(包括學習新技術) | 900 | 1000 |
Design Spec | · 生成設計文檔 | 40 | 30 |
Design Review | · 設計複審 | 30 | 60 |
Coding Standard | · 代碼規範(爲開發制定合適的規範) | 30 | 40 |
Design | · 具體設計(用僞代碼,流程圖等方法來設計具體模塊) | 200 | 500 |
Coding | · 具體編碼 | 1500 | 1600 |
Code Review | · 代碼複審 | 30 | 40 |
Test | · 測試(自我測試,修改,提交修改) | 80 | 100 |
Reporting | · 報告 | 100 | 100 |
Test Report | · 測試報告 | 30 | 30 |
Size Measurement | · 計算工做量 | 10 | 15 |
Postmortem & Process Improvement Plan | · 過後總結並提出過程改進計劃 | 60 | 60 |
合計 | 4020 | 4875 |
網絡接口的使用
主要用到Post和Get兩種方法,做業上有相關接口,只需引用便可。後端
ui活動圖
api
def getcard(list1,list2):#出牌 x1=tuple(list1) d=0 v1=value0(list2) v2=value1(list2) v3=value2(list2) #print(v1,v2,v3) ca1=[] ca2=[] ca3=[] for i in itertools.combinations(x1, 5):#選後墩 c1=list(i) vc1=grade(c1) x2=tuple(set(list1)-set(c1)) if(vc1[0]>1): for j in itertools.combinations(x2,5):#選中墩前墩 c2=list(j) vc2=grade(c2) c3=list(set(x2)-set(j)) vc3=grade(c3) if((vc1[0]>vc2[0])and (vc2[0]>vc3[0]))or((vc1[0]==vc2[0])and( vc2[0]>vc3[0])and (vc1[1]>vc2[1]))or((vc1[0]>vc2[0])and (vc2[0]==vc3[0])and( vc2[1]>vc3[1]))or((vc1[0]==vc2[0])and (vc2[0]==vc3[0])and( vc1[1]>vc2[1])and (vc2[1]>vc3[1])): m=value(v3,vc3,0)+value(v2,vc2,2)+value(v1,vc1,3) a1=value(v3, vc3, 0) a2=value(v2, vc2, 2) a3=value(v1, vc1, 3) if((a1>910)and (a2>880 )and(a3>980)):#打槍 m*=2 if ((a1>910)or (a2>880 )or(a3>980))and((value(v3,vc3,0)-910)*(value(v2,vc2,2)-880)*(value(v1,vc1,3)-980)<0):#放一水贏兩水 m=m+650 elif((a1>910)or (a2>880 )or(a3>980))and((a1-820)*(a2-720)*(a3-940)<0):#不能贏時儘可能不被打槍 m+=200 #print(m) if m>d: d=m ca1=c1 ca2=c2 ca3=c3 ca3=f(ca3) ca2=f(ca2) ca1=f(ca1) return [ca3,ca2,ca1]
這段代碼爲關鍵代碼,這段代碼主要的是經過權值進行權衡。主要有三種狀況,當三墩牌組出比較通常的狀況下,經過權衡能夠放棄其中的一墩牌使其餘兩墩牌能更大;當三墩牌能達到必定的權值下能夠考慮平均三墩使三墩牌較大更有機率打槍;當三墩牌不太理想的狀況下能夠將其中一墩造大使本身不被打槍。經過這些權衡處理後得出權值最高的牌。
消耗最大的函數是request函數,主要時間花費在服務器響應上。
改進:本來使用組合數時沒有篩除後墩無需繼續判斷的牌型,致使在組合數上浪費較多的時間,改進後出牌速度大幅提高。
展現出項目部分單元測試代碼,並說明測試的函數,構造測試數據的思路
def gameopen(token): url = "http://api.revth.com/game/open" headers = {'x-auth-token': token} response = requests.request("POST", url, headers=headers) #print(response.text) dict_data = str(json.loads(response.text)) #print(dict_data) p=re.compile("'id': (.+?),") id=p.findall(dict_data) #print(id) p=re.compile("card': '(.+?)'") card=p.findall(dict_data)[0] #print(card) id.append(card) return id
這個代碼的單元測試主要來判斷正則是否正確
def getjson(id,list):#轉化json格式 z=['','',''] for i in range(0,len(list)): for j in range(0,len(list[i])): z[i]=z[i]+list[i][j] if(j!=len(list[i])-1): z[i]=z[i]+' ' data = {'id': id, 'card':z} #string = json.dumps(data, ensure_ascii=False) return data
這個的單元測試來判斷json格式是否正確
還有就是核心代碼的m來查看權值
在此次結對編程中最大的問題就是與API對接從API中獲取數據以及上傳數據到API。
剛開始不知道怎麼調用API測試代碼就成了一個問題,最後咱們經過python的random模塊隨機生成卡牌。但這治標不治本咱們就去百度和詢問柯老師班的同窗來解決這個問題。
已解決
有時候不懂去請教別人比本身盲目探求的效率來得高,無論是問來仍是查來的只要咱們能很好的掌握這都是咱們的知識。
陳錦傑:
隊友一個字形容「強」,開始編程的時候先後端任我挑本身雖然不太懂的前端也在他的自學下作得很是好,他最值得我學習的地方就是「不會找度娘」,若是針對此次結對編程來講隊友作的很好帶改進的就是要作的更好。
林鎔煒:
隊友很強,做業出來以後,他作ai,我作ui,原本還打算跟他一塊兒探討一下ai,沒想到他第三天就完事了,效率高得可怕。最值得我學習的地方就是工做態度,我太拖了。對隊友的改進的建議是下次別再一我的默默肝完了,哈哈。
第N周 | 新增代碼(行) | 累計代碼(行) | 本週學習耗時(小時) | 累計學習耗時(小時) | 重要成長 |
---|---|---|---|---|---|
1到4 | 565 | 565 | 48 | 48 | 算法設計及優化 |