第二次結對編程做業

UI視頻地址:https://v.youku.com/v_show/id_XNDQwODg4NTcwNA==.html?spm=a2h3j.8428770.3416059.1

一、結對同窗地址:https://www.cnblogs.com/elis/

本做業博客連接:http://www.javashuo.com/article/p-ygeboapj-kc.html

倉庫地址https://github.com/vjudge0913/13Water/

二、具體分工

陳啓昌:網頁前端html、與服務器交互html

劉華一:網頁後端python、寫博客前端

三、PSP表格

Planning 計劃 預計耗時 實際耗時
Planning 計劃 15 30
Estimate 估計這個任務須要多少時間 40 50
Development 開發 500 850
Analysis 需求分析 (包括學習新技術) 120 230
Design Spec 生成設計文檔 60 60
Design Review 設計複審 15 10
Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 70 60
Design 具體設計 120 180
Coding 具體編碼 500 800
Code Review 代碼複審 50 50
Test 測試(自我測試,修改代碼,提交修改) 120 120
Reporting 報告 30 30
Test Repor 測試報告 30 30
Size Measurement 計算工做量 10 10
Postmortem & Process Improvement Plan 過後總結, 並提出過程改進計劃 30 30
合計 1710 2540

四、解題思路描述與設計實現說明

  • 網絡接口的使用
    • 註冊: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
  • 代碼組織與內部實現設計
    python

  • 說明算法的關鍵與關鍵實現部分流程圖
    由於python運行效率低,遍歷全部狀況須要6s,因此採用c++生成全部排列狀況,而後用json.loads載入 c++代碼以下
int rec[20];
int cnt=0;
int pt()
{
    vector<int> ve[5];
    for(int i=1;i<=13;i++)ve[rec[i]].pb(i);
    if(ve[1].size()==3&&ve[2].size()==5&&ve[3].size()==5)
    {
        cnt++;
        cout<<'[';
        for(int i=0;i<ve[3].size();i++)
        {
            cout<<ve[3][i];
            if(i!=ve[3].size()-1)cout<<',';
        }
        cout<<']';
        cout<<',';
        
        cout<<endl;
        
     } 
}
int dfs(int deep,int col)
{
    if(deep>13)
    {
        pt();return 0;
    }
    if(deep)rec[deep]=col;
    if(deep<13)
    for(int i=1;i<=3;i++) 
    dfs(deep+1,i);
    else
        dfs(deep+1,1);
    
}
int main()
{
    freopen("1.txt","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout<<'[';
    dfs(0,1);
    cout<<']';
    
}

以上代碼生成3 5 5 排列 ,保存爲3.txt,51.txxt,52.txtios


在python內,載入保存爲listc++

而後各類各類特判,找出權值最大的方案返回git

五、關鍵代碼解釋

後端使用flask框架接收前端信息代碼以下:github

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()

調用init_card()函數對卡牌信息進行預處理ajax

map_color2i={"$":1,"&":2,"*":3,"#":4}
map_i2color={1:"$",2:"&",3:"*",4:"#"}
map_card2i={"A":14,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"10":10,"J":11,"Q":12,"K":13}
 card_list.clear()
    vector_color.clear()
    vector_num.clear()
    card_list.append((0,0))
    for i in range(1,16):
        vector_num.append([])
        vector_color.append([])
    print(card_list_str)
    for i in card_list_str:
        color=map_color2i[i[0]]
        num=map_card2i[i[1]]
        card_list.append((color,num))
        vector_color[color].append(num)
        vector_num[num].append(color)
    for i in range(1,5):
        vector_color[i].sort()
    print(card_list)

將每一張牌信息保存爲一個tuple 第一個值是花色1-4 第二個是數字2-14(A爲14)
處理完後的信息以下:
算法

六、性能分析和改進

改進思路:python跑得慢,c++跑得快,原來想用python實現前端和c++連起來,但有點麻煩,因而採用使用c++生成排列,
python生成排列用時3s,c++生成後保存爲文件,python用loads載入只用300ms,快了10倍
而後嘗試用postman測試須要運算2.56s
json

七、單元測試

測試用例:

&K $7 #8 #4 *10 &10 &9 *J #7 *K $8 $A $K
&5 #8 #7 #A *8 &3 &A &10 &4 &9 *J *4 &2
$4 *J &4 $A $J *4 &A $K &3 #3 #7 &5 &2
*9 $A #6 *2 &7 $8 #J $2 #Q #10 $9 &10 #4
*9 &A *4 $10 #8 #3 $5 $2 &5 $9 &10 #4 *K
&5 *J #4 *9 &Q &3 $Q #2 *5 *6 &A $8 $K
*K *9 #J $2 $9 &5 $8 &J &4 &8 $A *10 &7
*8 *K #4 &K $2 #Q $6 *Q $K &J *10 &5 $3
*K *A &Q &6 &K *4 $5 $7 #Q &A $6 #K #5
*9 &7 &K #5 #A $9 *7 $A *2 #3 &4 *J #9

測試輸出:

{"card":["*2 *2 *3","*4 *4 *5 *5 *5","*6 *6 *A *A *A"]}
{"card":["#7 *8 #8","&A #A &4 *4 *J","&2 &3 &5 &9 &10"]}
{"card":["&3 #3 #7","*J $J $K &2 &5","&4 *4 $4 &A $A"]}
{"card":["*2 $2 $A","*9 $9 &7 $8 &10","#4 #6 #10 #J #Q"]}
{"card":["*4 #4 &A","&5 $5 #3 #8 *K","*9 $9 &10 $10 $2"]}
{"card":["*9 *J $K","&Q $Q &A *5 $8","#2 &3 #4 &5 *6"]}
{"card":["*9 $9 *10","#J *K $A $2 $8","&4 &5 &7 &8 &J"]}
{"card":["*8 *10 &J","$2 $3 #4 &5 $6","&K *K $K *Q #Q"]}
{"card":["&6 $6 $7","&Q #Q #5 $5 *4","&K *K #K &A *A"]}
{"card":["&4 #5 *J","&7 *7 &K *2 #3","*9 #9 $9 #A $A"]}

八、貼出Github的代碼簽入記錄

九、遇到的代碼模塊異常或結對困難及解決方法

問題描述 作過哪些嘗試 是否解決 有何收穫
ajax發post和get 無數種 我太菜了
對接AI遭遇CORS 導入包配置一下 暫無,已有思路 https真香
設計原型前沒有看好需求 重構了一部分 原型仍是得好好整
github的使用:徽章?開源協議?持續集成?分支? 996徽章?一我的開分支意義不大 我仍是太菜了

十、評價你的隊友

值得學習的地方:
啓昌太強了,老是肝到很晚,很是感動
須要改進的地方:
太強了 沒有

學習進度條

第N周 新增代碼 累計代碼 本週學習 累計學習 重要成長
第1周 xxx xx 15h 15h mokcingBot
第3周 1000(1.64MB無圖片) 1000(1.64MB無圖片) 20h 35h 先後端交互

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息