第二次結對編程做業

一、在文章開頭給出結對同窗的博客連接、本做業博客的連接、你所Fork的同名倉庫的Github項目地址(2分)

陳鈺蕙: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

二、給出具體分工(2分)

陳鈺蕙:負責前端和美工web

鄭雅芳:負責後端和美工算法

三、給出PSP表格(2分)

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

四、解題思路描述與設計實現說明(15分)

網絡接口的使用(3分)

參考博客: 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

代碼組織與內部實現設計(類圖)(6分)

參考代碼: https://github.com/WangYunZYJ/PokerProvider

一開始沒有什麼頭緒,開會的時候問了一下其餘人,說GitHub上有開源碼,就去找了一下,這個參考代碼包括了發牌系統,加上對JAVA不太熟悉,就研究了好久。最後以其中的包AlgorithmByBai爲基礎,進行修改和編碼。

代碼組織和內部實現設計類圖以下

說明算法的關鍵與關鍵實現部分流程圖(6分)

創建了Card和Choice對象,用於存儲牌和三墩,同時創建array對象,記錄有一、二、三、4張同花色牌型和同大小牌型的狀況,便於算法分析整理。主要實現算法的類是Player,流程圖以下所示

//xmind畫流程圖好像有點醜……

五、關鍵代碼解釋(3分)

貼出你認爲重要的/有價值的代碼片斷,並解釋(3分)
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;
        }

六、性能分析與改進(6分)

描述你改進的思路(5分)

後端部分:普通牌型的選擇思路還存在許多冗餘的代碼能夠進行簡化。
前端部分:原本直接在主線程裏接了接口,運行後發現會出現些問題,因而將接口放在子線程裏。可是又發現了一個問題,子線程中無法直接設置界面資源,通過參考了一些博客的解決方法,最後藉助Handler處理異步消息,實現子線程中得到的參數對界面的設置.

展現性能分析圖和程序中消耗最大的函數(1分)

七、單元測試(5分)

展現出項目部分單元測試代碼,並說明測試的函數,構造測試數據的思路

八、遇到的代碼模塊異常或結對困難及解決方法(8分)

代碼模塊異常:鏈接API的時候一直報錯NoClassDefFoundError,百度說是進程衝突的問題,目前尚未解決。
結對困難:採用先後端分離的設計,遇到的最大困難就是將先後端的接口進行銜接。查詢後瞭解到須要放到服務器上,並不具有該條件的咱們因爲開發語言相同,選擇將後端代碼複製粘貼到as中,實現先後端的銜接。

問題描述(2分)
  • 撲朔迷離的接口和間歇性抽風的Android Studio(手動再見),當事人表示很是後悔,改bug的時間都夠學web了吧இAஇ

  • api調用:沒有接觸過api調用,一臉懵逼,百度以後,大概就是實例代碼看不懂,理論知識學不會(;´༎ຶД༎ຶ`)

  • 算法實現:一開始的疑問,暴力模擬(大概就是最死板的那樣打的意思)會超時嗎。後來,你告訴我怎麼直接打,被各類狀況逼瘋இAஇ

作過哪些嘗試(2分)
  • 面向百度好像沒有什麼結果,後來開會閒聊纔想起來能夠去GitHub找開源碼。搜索十三水真的有項目,後來抱着求知的心(看不懂前面找的算法),還搜索了shisanshui、ThirteenWater,事實證實善用搜索引擎很重要。並且有的項目裏有shisanshui的字樣的代碼,命名和描述與十三水無關的,就能夠找到更多,跑題了(。
  • 雖然算法仍是隻知其一;不知其二,可是學習開源碼的過程當中收穫不少,學習了用Maven組織項目,入門了Spring框架,嘗試用springboot解決問題……(一點點感想:我發現比起跟着書本一步步的打代碼,這樣經過實踐項目的學習更會讓人有上癮的感受,就像解密同樣,一步步的學習。並且這樣的學習與實踐須要關聯度更大。算是學到一種新的學習方法吧。去找一些優秀的開源項目,而後把它從頭學到尾,能夠收穫不少。
是否解決(2分)
  • 算法大概就是實現到能夠正兒八經出牌,可是不保證勝利的程度,可是api調用仍是有問題,須要進一步解決。
有何收穫(2分)
  • 自我學習和探索的能力,接觸到了新的學習方法。
  • 從Android到Eclipse再到IDEA,一個合適的、用着順手的(、有問題都能百度獲得詳細教程的)IDE也是很重要的
  • 入門了Spring框架,進一步學習了Java

九、評價你的隊友(4分)

雅芳說:

值得學習的地方:「今天也是很喜歡陳鈺蕙的一天啊」,陳鈺蕙真的很討喜啊,一點點進步就不會絕不吝嗇她的誇獎,偶爾暴躁的話也能夠很快被她安撫好。我就喜歡這種一言不合就誇個人脾氣賊好的遇到問題會一塊兒討論的小姐姐q(≧▽≦q)

須要改進的地方:若是我是拖延症,那陳鈺蕙就是拖延癌了吧,還伴隨着沒有課就不出門的死宅屬性。

鈺蕙說:

值得學習的地方:寶藏女孩鄭雅芳!一塊兒作事情就是發現她越多隱藏技能的過程,美工超棒,獲取、學習信息也賊快,害,抱雅芳學姐大腿太舒服了!

須要改進的地方:就是咱們倆的拖延症吧哈哈哈

十、學習進度條(2分)

第N周 新增代碼(行) 累計代碼(行) 本週學習耗時(小時) 累計學習耗時(小時) 重要成長
1 0 0 7.6 7.6 最重要的固然是學會了十三水!學習了Axure,實現了原型設計
2 200 200 22 29.6 討論如何實現算法,對JAVA進一步學習。決定用安卓進行開發
3 1920 1920 21 50.6 學習和研究GitHub開源碼,開始用idea實現後端算法
4 2293 2293 28 78.6 完善算法,實現交互,接口調試

(我真的有看清楚第二行是累計代碼,沒有累計的緣由是每次都重寫了QAQ)

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