一、項目總體說明
1.1 項目總體說明
該項目是基於JSF框架的在線棋牌遊戲平臺,目前有五子棋和象棋兩項已完成子模塊,皆支持人機對戰與在線匹配對戰,其中象棋還支持大部分棋牌平臺不支持的覆盤功能。項目整體設計合理,功能齊全,有較好的用戶交互功能界面。
1.2 開發環境的選擇、安裝與配置
IDE : NetBeans 8.0.02
數據庫:javaDB
服務器:GlassFish 4
瀏覽器:Chrome
其它:JDK8、jquery3.0.1
二、項目設計概要
2.1 項目需求分析
項目要求使用B/S結構,利用Java EE開發平臺,基於JSF框架實現一個B/S結構的分佈式在線棋牌遊戲平臺,並實現系統的各項功能,包括用戶數據管理、遊戲頁面開發、實現相應邏輯、遊戲數據存儲等。
用例圖:
實體關係圖:
2.2 系統總體設計
系統總體分成五個模塊:
-
-
- 五子棋模塊
- 象棋模塊
- 用戶模塊
- 數據庫模塊
- 其他頁面模塊
-
本系統利用Java EE開發平臺,基於JSF框架實現了一個B/S結構的分佈式在線棋牌遊戲平臺,並實現了系統所需的各項功能,包括用戶數據管理、遊戲頁面開發、實現相應邏輯、遊戲數據存儲等。
2.3 數據庫設計
2.4 系統工作流程設計
未註冊用戶可註冊本系統,已註冊用戶登錄本系統後可以修改自身信息、玩遊戲等,根據用戶選擇遊戲類型和其他相關操作顯示相應界面,用戶玩遊戲時內部邏輯進行數據的傳輸、處理與存儲。
2.5 資源清單和說明
表現層頁面:
- index.xhtml 首頁
- layout.xhtml 基本佈局部分
- header.xhtml 首頁頭部信息
- footer.xhtml 首頁尾部信息
- MainPage.xhtml 首頁中主要內容
- login.xhtml 登錄頁面
- register.xhtml 註冊頁面
- error.xhtml 出錯頁面
- ChineseChessIndexPage.xhtml 象棋人機對戰首頁
- ChineseChess.xhtml 象棋人機對戰主要內容
- PVPChineseChessIndexPage.xhtml 象棋人人對戰首頁
- PVPChineseChess.xhtml 象棋人人對戰主要內容
- ReplayChineseChessIndexPage.xhtml 象棋覆盤首頁
- ReplayChineseChess.xhtml 象棋覆盤主要內容
- GoBangIndex.xhtml 五子棋首頁
- man.xhtml 五子棋人人對戰界面
- wuzi 五子棋人機對戰界面
表現層資源:
- 象棋棋盤圖片
- 象棋棋子圖片
- 象棋背景音樂、落子及輸贏音效
- 五子棋棋盤圖片
- 五子棋棋子圖片
- 首頁大屏輪轉圖片
- 登錄、註冊背景圖片
BackingBean類:
-
- LoginControl
- RegisterControl
- RecvBean
- SesstionAtt
- RoomBean
- Ai
- Node
- End
實體映射類:
-
- Matchstepinfo
- Matchrecord
- Usertable
實體訪問類:
-
-
- MatchstepinfoFacade
- MatchstepinfoFacadeLocal
- MatchrecordFacade
- MatchrecordFacadeLocal
- UsertableFacade
- UsertableFacadeLocal
-
業務邏輯組件:
訪問數據庫相關:
- UserEJB
- MatchStepEJB
- MatchRecordEJB
象棋執行相關:
- ExeBean
五子棋執行相關:
- Ai
- Node
2.6 主要界面設計效果截圖和說明
註冊界面:
登錄界面:
修改個人信息界面:
象棋部分可選擇彈框:
象棋選擇人機後的彈框:
選擇進入大廳的彈框:
大廳中選擇進入房間:
象棋遊戲界面:
象棋輸贏界面:
選擇象棋覆盤彈框
象棋覆盤界面:
五子棋首頁:
五子棋人機界面:
五子棋人人界面:
2.7 程序代碼
以電子版形式提交
三、項目關鍵性問題分析及技術解決方案
3.1 象棋電腦部分如何編寫
象棋AI主要採用極大極小搜索和α-β剪枝算法實現,並使用二進制棋盤和置換表等策略進行加速,其中子力價值表的設定參照了象棋巫師。
3.2 五子棋電腦部分如何編寫
五子棋AI主要採用極大極小搜索和α-β剪枝算法實現。
3.3 客戶端何時及如何從服務器端動態獲取數據
採用監聽值改變事件的方法確定獲取數據時機。客戶端通過與服務器端屬性進行值綁定,可以在頁面初始化時直接獲取服務器端屬性值,通過表單提交和AJAX方式可局部刷新頁面。但是若想在客戶端獲取值改變事件,因爲通過服務器端直接改變屬性值和AJAX傳輸方式並不會觸發onchange、oninput、attributeValueChange等事件,可通過JS獲取原值,設置一個定時器,每隔0.1秒檢查值是否改變,並作出相應變化。
3.4 服務器端的棋局如何展示在客戶端界面上
採用在服務器端和客戶端同時存儲棋盤方式,通過數據傳輸使兩棋盤保持一致。用戶下棋時做出的操作通過提交表單和AJAX方式提交到服務器端,服務器端進行檢查合法性等行爲,再將服務器端返回結果呈現於客戶端界面上。客戶端通過動態接收服務器端數據做出相應改變(移動棋子,顯示棋子邊框等)。
3.5 兩個用戶如何進行匹配對戰
服務器默認擁有50個房間(即房間是ApplicationScoped),每個房間都保存了有獨立的ID、房間名、唯一的棋盤、當前的步法、當前房間人數、能否開始的判斷標記以及先後手的ID,在第一個玩家進來後設置先手的ID並進行等待,直到第二個玩家進入,設置後手ID並開始遊戲。雙方玩家在己方行棋時,若行棋合法,則將步法更新到房間的當前步法中,更新界面並設置對方開始行棋;在對方行棋時,則通過計時器不停地取房間的當前步法,若發現對手已經行棋,則更新界面並設置己方開始行棋。如此循環,直到一方勝利。
四、項目測試及結論
4.1 測試用戶體驗效果
用戶體驗良好,尤其是象棋界面,背景音樂選擇的皆是著名純音樂,使人身心愉悅。下象棋時遊戲音效和顯示效果很好,表揚象棋前端人員。
4.2 測試象棋AI是否足夠智能
該象棋AI非常強大,我連簡單人機都下不贏,表揚象棋AI後臺人員。
4.3 測試系統是否流暢
該系統十分流暢,銜接的很自然。
4.4 美中不足的一點
囿於開發人員和開發時間問題,該系統目前只有兩個遊戲,不足以支撐一個平臺運營。