陳鈺蕙:http://www.javashuo.com/article/p-kkwmkcqc-bb.htmlhtml
鄭雅芳(本做業):http://www.javashuo.com/article/p-nfnedhjr-bo.html前端
Github地址: https://github.com/YvonneLhy/ThirteenWatergit
UI視頻:https://pan.baidu.com/s/1Lv-FIDN4rfea41MYvaKYoAgithub
陳鈺蕙:負責前端和美工web
鄭雅芳:負責後端和美工算法
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 60 | 50 |
Estimate | 估計這個任務須要多少時間 | 60 | 50 |
Development | 開發 | 3600 | 4500 |
Analysis | 需求分析 (包括學習新技術) | 420 | 540 |
Design Spec | 生成設計文檔 | 60 | 60 |
Design Review | 設計複審 | 30 | 40 |
Coding Standard | 代碼規範 (爲目前的開發制定合適的規範) | 30 | 20 |
Design | 具體設計 | 360 | 400 |
Coding | 具體編碼 | 1440 | 2000 |
Code Review | 代碼複審 | 60 | 90 |
Test | 測試(自我測試,修改代碼,提交修改) | 1200 | 1350 |
Reporting | 報告 | 140 | 180 |
Test Report | 測試報告 | 60 | 80 |
Size Measurement | 計算工做量 | 20 | 20 |
Postmortem & Process Improvement Plan | 過後總結, 並提出過程改進計劃 | 60 | 80 |
合計 | 3800 | 4730 |
參考博客: https://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.htmlspring
主要是http的get和post請求,有嘗試過用Apache Jakarta Common下的子項目HttpClient(後端
參考博客: http://www.javashuo.com/article/p-vqxryedq-ea.htmlapi
),可是感受不太能理解,並且須要添加新的依賴有點麻煩的樣子(?),用傳統JDK自帶的URLConnection比較看得懂的樣子。就選擇了第一篇參考博客提供的方法。
在下定決心搞懂Connection後,被憨憨嘲諷了:)
永福提供的提供的接口能夠直接複製使用,只是須要添加一些依賴包,詳細可見參考博客:https://blog.csdn.net/bigbigsman/article/details/90707669springboot
參考代碼: https://github.com/WangYunZYJ/PokerProvider
一開始沒有什麼頭緒,開會的時候問了一下其餘人,說GitHub上有開源碼,就去找了一下,這個參考代碼包括了發牌系統,加上對JAVA不太熟悉,就研究了好久。最後以其中的包AlgorithmByBai爲基礎,進行修改和編碼。
代碼組織和內部實現設計類圖以下
創建了Card和Choice對象,用於存儲牌和三墩,同時創建array對象,記錄有一、二、三、4張同花色牌型和同大小牌型的狀況,便於算法分析整理。主要實現算法的類是Player,流程圖以下所示
//xmind畫流程圖好像有點醜……
for(int i=0;i<handCard.size();i++) { if((i+1)<handCard.size()&&handCard.get(i).rank==handCard.get(i+1).rank) if((i+2)<handCard.size()&&handCard.get(i).rank==handCard.get(i+2).rank) if((i+3)<handCard.size()&&handCard.get(i).rank==handCard.get(i+3).rank) //四張相同的牌 { arr.ranknum4.addAll(handCard.subList(i,i+4)); i+=3; } else //三張相同的牌 { arr.ranknum3.addAll(handCard.subList(i,i+3)); i+=2; } else //兩張相同的牌 { arr.ranknum2.addAll(handCard.subList(i,i+2)); i+=1; } else //沒有相同的牌 { arr.ranknum1.add(handCard.get(i)); } } for(int i=0;i<handCard.size();i++) { switch(handCard.get(i).type) { case 1:arr.typenum1.add(handCard.get(i));break; case 2:arr.typenum2.add(handCard.get(i));break; case 3:arr.typenum3.add(handCard.get(i));break; case 4:arr.typenum4.add(handCard.get(i));break; } } }
上面所示代碼十分簡單,但經過統計到手十三張牌的花色、大小相同的張數的狀況(我不知道這樣有沒有描述清楚,大概就是,ranknum1存儲的是僅一張這樣大小的牌的數量),大大簡化了後面算法過程當中判斷特殊牌型和一部分普通牌型的算法,減小了冗餘代碼,提升程序效率。如判斷特殊牌型三分天下代碼以下圖所示:
if(arr.ranknum4.size()==12) //三分天下 { choice=tochoice(handCard); choice.headType="sanfentianxia"; return; }
後端部分:普通牌型的選擇思路還存在許多冗餘的代碼能夠進行簡化。
前端部分:原本直接在主線程裏接了接口,運行後發現會出現些問題,因而將接口放在子線程裏。可是又發現了一個問題,子線程中無法直接設置界面資源,通過參考了一些博客的解決方法,最後藉助Handler處理異步消息,實現子線程中得到的參數對界面的設置.
代碼模塊異常:鏈接API的時候一直報錯NoClassDefFoundError,百度說是進程衝突的問題,目前尚未解決。
結對困難:採用先後端分離的設計,遇到的最大困難就是將先後端的接口進行銜接。查詢後瞭解到須要放到服務器上,並不具有該條件的咱們因爲開發語言相同,選擇將後端代碼複製粘貼到as中,實現先後端的銜接。
撲朔迷離的接口和間歇性抽風的Android Studio(手動再見),當事人表示很是後悔,改bug的時間都夠學web了吧இAஇ
api調用:沒有接觸過api調用,一臉懵逼,百度以後,大概就是實例代碼看不懂,理論知識學不會(;´༎ຶД༎ຶ`)
算法實現:一開始的疑問,暴力模擬(大概就是最死板的那樣打的意思)會超時嗎。後來,你告訴我怎麼直接打,被各類狀況逼瘋இAஇ
雅芳說:
值得學習的地方:「今天也是很喜歡陳鈺蕙的一天啊」,陳鈺蕙真的很討喜啊,一點點進步就不會絕不吝嗇她的誇獎,偶爾暴躁的話也能夠很快被她安撫好。我就喜歡這種一言不合就誇個人脾氣賊好的遇到問題會一塊兒討論的小姐姐q(≧▽≦q)
須要改進的地方:若是我是拖延症,那陳鈺蕙就是拖延癌了吧,還伴隨着沒有課就不出門的死宅屬性。
鈺蕙說:
值得學習的地方:寶藏女孩鄭雅芳!一塊兒作事情就是發現她越多隱藏技能的過程,美工超棒,獲取、學習信息也賊快,害,抱雅芳學姐大腿太舒服了!
須要改進的地方:就是咱們倆的拖延症吧哈哈哈
第N周 | 新增代碼(行) | 累計代碼(行) | 本週學習耗時(小時) | 累計學習耗時(小時) | 重要成長 |
---|---|---|---|---|---|
1 | 0 | 0 | 7.6 | 7.6 | |
2 | 200 | 200 | 22 | 29.6 | 討論如何實現算法,對JAVA進一步學習。決定用安卓進行開發 |
3 | 1920 | 1920 | 21 | 50.6 | 學習和研究GitHub開源碼,開始用idea實現後端算法 |
4 | 2293 | 2293 | 28 | 78.6 | 完善算法,實現交互,接口調試 |
(我真的有看清楚第二行是累計代碼,沒有累計的緣由是每次都重寫了QAQ)