@
一、團隊介紹
成員姓名 | 任務分配 | 成員課程設計博客鏈接 |
---|---|---|
蘭澤祥(組長) | 數據庫,斗地主規則的實現,人機自動出牌的算法,實體類的設計 | JAVA面向對象編程課程設計——web版斗地主 |
吳修恩 | JSP界面的設計,前后端數據的交互,servlet設計,動態更新界面 | Java課程設計---web版斗地主 |
二、項目GIT地址
三、項目git提交記錄截圖
四、項目功能架構圖、主要功能流程圖
五、面向對象設計類圖
1、CardGames類圖:該類為牌局組類,與2的牌局類不同的是,牌局組對象里包含了一個Map以及牌局標識ID。
2、CardGame類圖:該類為牌局對象,包含了一個牌局中需要用到的地主牌,3副手牌,地主標識,是否出牌的標識等等。
3、Card類圖:該類為卡牌對象,用於存放54張撲克牌,只包含了卡牌的名稱,即圖片名
4、UserUserInformation類圖:該類為用戶信息類,包含了用戶信息有用戶的賬號,昵稱和積分
5、User類圖:該類為用戶類,包含了用戶的賬號密碼
六、項目運行截圖與屏幕錄制
1、登錄界面
2、注冊界面
3、初始界面
4、排行榜界面
5、游戲界面
6、項目運行屏幕錄制(主要展示多人同時進行游戲)
七、項目關鍵代碼
1、通過Ajax提交數據
本次課設中是調用jQuery中的ajax()方法進行發送請求的,所以首先需引入jQuery。
type
: 所要請求的方式(post或get)。
url
: 發送請求的地址。
contentType
:內容編碼類型,默認為"application/x-www-form-urlencoded
"。該默認值適合大多數應用場合。但是要傳輸復雜的json對象時就須要使用application/json 。
traditional
: 有true和false兩種值,默認的話,traditional為false,即jquery會深度序列化參數對象,servrlet api 無法處理, 而設為true便可阻止深度序列化。這樣就可以在Java后台通過request.getParameterValues()
就可以簡單獲取數組了。(適用於簡單的字符串數組,復雜的對象還是使用默認值,在后台再使用流進行讀取)
success
: 載入成功后執行回調函數
還有個getJSON專門請求json數據,格式為$.getJSON(url,[data],[callback])
url
:string類型, 發送請求地址
data
:可選參數, 待發送 Key/value 參數 ,同get,post類型的data
callback
:可選參數,載入成功時回調函數,同get,post類型的callback
后台數據返回:
后台可以定義一個map集合,然后將鍵值對一一對應,最后使用JSON.toJSONString()
方法轉化為json字符串返回給前端。
2、斗地主規則的設計
既然是一個游戲,那就要有規則,其中最主要的就是,判斷所選的牌型是否正確,即是否符合規則。在牌型符合規則時,需要判斷是否能夠出牌。
在判斷所選的牌型是否符合規則的設計中,因為規則中的牌型是固定的,所以設計了一個常量CardType類,這個常量類中包括了符合斗地主規則的所有可選牌型以及不允許出牌的常量。
判斷牌型的時候,需要根據所選的牌的數量,以及各個牌型的特征,如:連對的基本特征為,需要連續3對,並且這三對的數值是連續的等等,來判斷用戶所選的牌是否為規則內的牌型,是的話返回相應的牌型,供后面的算法判斷,如果不是則返回c0,服務器就會給客戶端相應的反饋,禁止用戶出所選的牌。
判斷完牌型后,如果返回的不是c0,則需要判斷用戶是否能夠出所選的牌。在這個判斷中,首先就需要判斷用戶是主動出牌還是跟牌,如果為主動出牌,則服務器就會給客戶端相應的反饋,同意用戶出牌;如果為被動出牌,則需要判斷當前用戶所選的牌,與前面的用戶出的最大的牌進行比較。
當前面出的牌不是炸彈,而用戶選的牌型為炸彈時,既可以出牌。當用戶選的牌型不為炸彈時,需要判斷該用戶所選的牌是否與前面用戶所出的牌型相符合,若符合,則判斷該用戶所選的牌是否比前面用戶所出的牌大,若符合則允許出牌,否則禁止用戶出牌。
八、項目代碼掃描結果及改正
使用阿里巴巴靜態掃描工具對我們的項目進行掃描,得到的結果為:79 Blockers, 15 Criticals, 240 Majors。經過3個多小時的修改,將所有工具給我們的建議,全部修改完。
九、尚待改進
1、本次課設只有一周的時間,時間趕,任務重,沒有在界面上畫太多的時間,所以這個界面有點丑陋。
2、我們這次課程設計寫的程序已經支持多人同時進行游戲,但是只能是單機游戲,尚未實現多人進行同一場游戲。
3、我們所設計的機器人算法比較直白,比較“傻”,可以深入研究,甚至是通過人工智能的算法來提高人機的出牌機制,使得人機變得更“聰明”。
十、附錄
1、我們寫的課程設計是JAVA web項目,故我們買了一個阿里雲學生服務器,在課程設計結束時,我們已經將我們的項目部署到了該服務器上,有效期至2019-02-16。大家有興趣了解一下的可以訪問:網絡版單機斗地主。
2、項目部署方法