一、實驗分析
本系統主要有以下4個子產品,每個子產品對應一個程式包:
1、engine:搜尋引擎包,系統的核心部分。
2、message:網絡對戰過程中各種消息及其傳遞機制的類實作包。
3、main:主界面實作包。
4、pieces:棋子及其相關類實作包。
現就各個包中的要點給與說明。
二、項目功能
A、象棋對弈:紅方先走,然後黑方再走,紅黑交替,直到一方獲勝。
B、新遊戲:任何時候可以重新開始一盤新的對弈。
C、悔棋:當走錯棋的時候可以悔棋。
D、資訊提示:提示目前資訊狀态。
E、簡單的幫助文檔:象棋規則介紹、軟體的簡單介紹和編制說明
三、項目設計方案及分工
Engine:
(1) BitBoard.java:位棋盤的實作。
(2) CCEvalue.java:評價函數知識類。
(3) ChessPosition.java:動态局面類
包含對局過程中的動态資訊,主要實作的是各類位棋盤和移子函數。
(4) MoveStruct.java:着法表示類。
(5) PreMove.java:僞合法着法生成子產品。
(6) MoveSortStruct.java:合法着法的生成及其排序算法。
(7) SearchMove.java:搜尋算法。
Message:
在對弈過程中(主要是網絡對弈)需要在對弈雙方之間傳輸各類資訊,抽象為各類消息。如時間規則的協定、各方的走子資訊等。每方都有消息接收、消息處理和消息發送程式(OuterMsgReceiver、LocalMsgReceiver,QzMessageHandler,MessageSender)。己方的MessageSender與對方的OuterMsgReceiver通過接口SrConnection連接配接。所有接收的消息放入消息隊列QzMsgQueue中,等待消息處理程序QzMessageHandler來處理。所有的消息都封裝在QzMessage類對象中,消息的類型通過消息的Header類型(以靜态常量存放在MsgHeader類中)來區分。
Pieces:
Qizi.java包含棋子的資訊,如棋子的(在棋盤上的)位置、圖檔、名稱、類型、狀态等。PiecesFactory.java以“工廠”模式提供根據棋子類型或其他資訊生成相關Qizi對象的方法。
Main:
(1) NewBoard.java:棋盤坐标系統及其界面的實作。
(2) CChessApp.java:主界面類,以内部類實作了QzMessageHandler接口、計時規則TimeRule接口以及事件的處理程式,根據需要生成其他的并發線程如消息接收、處理和發送,機器思考(啟動搜尋引擎),計時顯示等。
(3) SetRuleDialog.java:設定規則的對話框。
(4) SetSysInfoDialog.java:設定系統的一些屬性如對戰模式、連接配接端口等。
(5) Translation.java:提供了一系列實用方法主要有:
1)FEN串與局面ChessPosition對象之間的轉換
2)不同着法表示(見第一章)之間的轉換。如“炮二平五”與“Ch2-e2”及“62.5或C2.5“(C和6代表炮)這幾種表示法之間的轉換
3)棋譜檔案的讀入和存儲。
4)開局庫的生成:将近年實戰的棋譜檔案(可能有幾種格式)整理生成開局庫。
分工:劉暢負責寫代碼和整理分析程式功能,丁勝男負責代碼測試以及測試後的截圖。
心得體會:通過這次試驗,我懂得了合作的重要性,兩個人商量總比一個人瞎捉摸強。寫代碼還是有很多錯誤。以後更要細心認真的聽課。加油。