五子棋試驗報告_第1頁
五子棋試驗報告_第2頁
五子棋試驗報告_第3頁
五子棋試驗報告_第4頁
五子棋試驗報告_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、五子棋實驗報告一、實驗目的和要求1、能夠用編程語言實現一個簡單的五子棋程序2、在實際系統中使用、實現人工智能的相關算法3、進一步加深對人工智能算法的理解二、五子棋的基本常識與原理1、五子棋的起源五子棋,是一種兩人對弈的純策略型棋類游戲,亦稱“串珠”、“連五子”;是中國民間非常熟知的一個古老棋種。相傳,它起源于四千多年前的堯帝時期,比圍棋的歷史還要悠久。亦有傳說,五子棋最初流行于少數民族地區,以后漸漸演變成圍棋并在炎黃子孫后代中遍及開來。五子棋發展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫生,引人入勝;不 僅能增強思維能力,提高智力,而且富含哲理,有助于修身養性。傳統五子棋的棋具與圍棋相

2、同, 棋子分為黑白兩色, 棋盤為19X19,棋子放置于棋盤線 交叉點上。兩人對局,各執一色,輪流下一子,先將橫、豎或斜線的5個或5個以上同色棋子連成不間斷的一排者為勝。因為傳統五子棋在落子后不能移動或拿掉, 所以也可以用紙和 筆來進行游戲。2、五子棋的基本常識與任何一種競技棋一樣,五子棋的每一局棋也分為三個階段:開局,中局和殘局。五子棋的開始階段稱為開局,或稱布局。其開局階段是十分短暫的,大約在七著與十幾著之間。在這一階段的爭奪中,雙方的布局,應對將對以后的勝負起著極為關鍵的作用。在開局階段取得的形勢好壞, 主動與被動,先手與后手的優劣程度, 往往直接影響中局的戰斗。 因此積極處理好開局和開局

3、向中局的過渡十分重要。五子棋是從一至五, 逐漸布子,發展連系,同時運用限制和反限制的智慧, 在連子的過 程中為自己的棋子爭得相對的主動權和優勢, 逐步擴展優勢,或者從劣勢轉化為優勢, 擊潰 對方的防線,最后連五取勝或抓禁手取勝或迫使對方投子認負。3、五子棋比賽的相關規定(1)職業連珠規則a. 黑方先下子,白后下,從天元開始相互順序落子。b. 最先在棋盤橫向、豎向、斜向形成連續的相同色五個棋子的一方為勝。c. 黑棋禁手判負,白棋無禁手。黑棋禁手包括“三三”(包括“四三三”)、“四四”(包括“四四三”)、“長連”。即黑棋只能以“四三”取勝。有關術語解釋請見圖示說明。d. 如分不出勝負,則定為平局。

4、對局中拔子、中途退場均判為負。e. 五連與禁手同時形成,判勝。比賽中的規定和特例a. 對局開始前,雙方猜子,大數減小數,單數交換,偶數不換。b. 白棋第一手(即盤面第二著棋)應在天元為界自己一側布子,主要以示尊重對方, 之后雙方可任意行子。c. 對局中雙方應遵守“職業連珠五子棋規則”,如出現爭議,應由裁判判定。d. 對局中掉子(棋子掉落在棋盤上)的一方判負。如遇推子或蹭子,以盤面第一落點為準。 用手將棋子扶正不算違規。e. 對局中應禮貌行棋,防止不正常聲音、動作影響對方思考。f. 比賽結束后,雙方應將各自棋子放回原處。g. 對局中如黑方出現禁手,白方應立即指出禁手點,黑方即負。如白方在黑方出現

5、禁 手后,又下一步白子,黑棋禁手則不成立了。h. 比賽對局時間,雙方分別為 15分鐘、1小時、2小時、5小時四個等級標準,超時判 負。(3)特殊規定職業五子棋雖然對黑棋采取了種種限制,但黑子先行的優勢依然很大。因此,在高段位的職業比賽中,又出現了三種特殊的規定。a. 指定打法:是指比賽雙方按照約定好的開局進行對弈,由白棋先行。b. 三手可交換:是指黑棋下盤面第3手棋后,白方在下第四手之前,如感覺黑方棋形不利于己方,可提出交換,即執白棋一方變為執黑棋一方,而黑方不可以不換。c. 五手兩打法:是指黑棋在下盤面上關鍵的第5手棋時,必須下兩步棋,讓白棋在這兩步棋中拿掉一粒棋子,然后再繼續對弈。一般說來

6、,白棋肯定拿掉對白方不利的一點,而保留對黑方較為不利的那點讓黑方行棋。三、五子棋的系統設計1、系統用例模型設計五子棋系統應該具有選擇玩家先落子還是電腦先落子的功能,應該具有開始游戲和重新開始的功能,當然了,必須具有在玩家指定位置落子的功能。以上描述,用用例圖在圖1中做進一步描述。這部分功能,主要通過界面與系統的交互來實現。落子選擇玩家先落子十開始游戲選擇電腦先落子重新開始圖1五子棋系統的玩家用例圖各個用例,簡單描述如下:選擇電腦先落子:選擇后,在游戲過程中,由電腦執黑子,先落子;玩家執白子, 于電腦后落子;A棋勢掃描選擇玩家先落子:選擇后,在游戲過程中,由玩家執黑子,先落子;電腦執白子, 于玩

7、家后落子;落子:原則上說,只要不違反禁手規則,在玩家鼠標點擊最近的落子點落子,但是在本系統中,簡單起見,沒有考慮禁手規則;開始游戲:選擇后,根據設定的電腦還是玩家先落子,開始游戲;重新開始:在游戲途中,可以選擇重新開始,中斷游戲并重新開始游戲。同時,五子棋系統本身應該具有棋盤繪制、棋勢掃描、棋勢排序、棋勢評估、擇位落子,以及勝負判定的功能,尤其是對于棋勢排序、棋勢評估和擇位落子,這里是體現五子棋系統 人工智能(AI )的關鍵之處。以上描述,用用例圖在圖2中進一步描述。棋勢排序勝負判定圖2五子棋系統的系統用例圖各個用例,簡單描述如下:棋盤繪制:繪制19*19的棋盤及相關按鈕和選項,并負責電腦、玩

8、家落子后棋子的具體繪制;棋勢掃描:掃描目前棋盤上的所有八個方向上的落子情況,獲取整個對弈雙方的棋勢;棋勢排序:對獲取的八個方向的棋勢(實際上下合一,左右合一,左下右上合一, 坐上右下合一,為四個方向),進行排序,便于進行棋勢評估; 棋勢評估:分別對電腦和玩家的棋勢進行評估,量化棋勢;擇位落子:比較電腦和玩家的棋勢,若有利于玩家,則采取“守、堵”的策略,若 有利于電腦,則采取“攻、走”的策略;勝負判定:每次電腦或是玩家落子后,判斷勝負情況,若出現“五子連珠”,則“連珠”一方取勝,另一方失敗,游戲結束。2、系統界面設計為了實現玩家的用例所需要的功能,同時又便于使用,五子棋系統的界面設計得比較簡單,

9、如圖3所示。O擇位落子棋勢評估五子棋系統棋盤繪制整體界面為一個 19*19的棋盤,在f-06、f-14、j-10、n-06、n-14這五個位置畫了一個 小方塊,以提醒玩家棋盤的中央位置,便于把握有利位置落子。在棋盤的右側是一些控制和提醒選項、按鈕和對弈狀態標簽。其中,選項有“我是老大我先來”和“讓讓電腦也無妨”兩個。選擇前者,則玩家先落 子;選擇后者,則電腦先落子。按鈕有“人機對戰,快沖啊”和“不行了?那重來吧”兩個。單擊前者,則游戲開始; 單擊后者,則中斷游戲,重新開始。標簽有“就不告訴你是誰贏了”和“就不告訴你這是第幾步”兩個。前者是在游戲分出 勝負后,顯示是黑方取勝還是白方取勝;后者是在

10、游戲過程中, 不論是電腦落子還是玩家落子,都提示現在是第幾步落子。圖3五子棋系統界面3、系統模塊設計為了實現五子棋系統本身具有的功能,將系統分為這幾個模塊:五子棋主模塊、棋勢掃描模塊、棋勢排序模塊、棋勢評估模塊以及隨機落子模塊。其中,五子棋主模塊實現棋盤繪制、勝負判定的功能,以及對弈過程中對比雙方棋勢的擇位落子模塊。棋勢掃描模塊、棋勢排序模塊、棋勢評估模塊分別實現棋勢掃描、棋勢排序、棋勢評估的功能;而隨機落子模塊則實現在前兩步棋勢尚未形成時,電腦緊鄰玩家落子位置隨機擇位落子的功能,是用例圖中擇位落子功能的一部分。對應的,系統一共有五個類,分別對應五個模塊;分別為:五子棋主模塊Gobang類、棋

11、勢掃描 StatusScan類、棋勢排序 StatusSort類、棋勢評估 StatusEvaluation類,以及隨機落 子RandomPlay類。類圖如圖 4所示。其中Gobang類中的屬性和方法并沒有完全列出,只列出了主要的屬性和方法;其余類基本列出了所有的屬性和方法。具體細節將在第四部分“五子棋的實現與測試”一節討論, 這里不再贅述。圖4五子棋系統的類圖四、五子棋的實現與測試1、Gobang類的實現Gobang類是五子棋的核心類,棋盤繪制、棋子落子,響應事件的處理,游戲的控制和模式設置,勝負判定,以及對棋勢掃描、排序、評估等的調用都在這里實現。Gobang類的類圖如圖5所示。Goban

12、gStatus3can scanp StatusScan scanc RandomPlay randomP lay Status Evaluate evaluatep StatusEvaluate evaluatec Status So rt sortmain。paint()setQizi(intx, int y)draw_qipan()Game_start() Game_restart() *Judge()*boolean Game-Winjfintx, int y) *boolean Game_win_2(int x, int y) boolean Game-Winjfintx, int

13、y)boolean Game win 4(int x, int y)圖5 Gobang類類圖其中棋盤的繪制, 有paint()和init()來實現,棋子落子由setQizi()來實現,響應事件的處 理也在這個類中添加監視器并處理,而游戲的控制和設置在Game_start()和Game_rastart()中實現,游戲勝負的判定由Judge()方法和四個判定不同方向上是否五子連珠的Game_win_*()函數來實現。而最為重要的棋勢掃描、排序和評估,則由其屬性scanp seanc、sort、evaluatep、evaluatec分別調用它們的方法來實現。隨機落子由屬性randomPlay調用其方

14、法實現。2、StatusScan類的實現StatusScan類通過掃描目前棋盤上的所有八個方向上的落子情況,獲取整個對弈雙方的 棋勢。StatusScan類的類圖如圖6所示。StatusScan shapestatusScain(int| chesspad, int colour)圖6 StatusScan類類圖其中三維數組shape為一個20*20*5的數組,用來存儲所獲取的整個對弈雙方的棋勢。 當然了,在實際實現中,實例化了兩個StatusScan類的對象scanp和scanc,這兩個對象分別用來存儲玩家的棋勢和電腦的棋勢。而statusSca n()方法具體實現從棋盤上獲取整個棋勢的具體

15、過程,參數chesspad存儲棋盤上的詳細落子情況,參數colour決定需要獲取的是黑方的棋勢還是白方的棋勢。具體掃描時,對于棋盤(i, j)處,有上下、左右、左下右上、坐上右下八個方向,但是統計時,將上下、左右、左下右上、左上右下分別合一,則一共有四個 結果,分別存儲在shapeij0、shapeij1、shapeij2、shapeij3中。3、StatusSort類的實現StatusSort類對StatusScan類掃描得到的棋勢進行排序,以便于做進一步的棋勢評估。 StatusSort類的類圖如圖7所示。StatusSortstatusSortfint shapeQ)圖7 StatusS

16、ort類類圖其中,StatusSort類只有一個方法 statusSort(),參數shape即為StatusScan類掃描獲取的 棋勢數據,該方法主要是對shape中的棋勢數據進行排序,使得shape數組滿足以下條件:from i, j = 1 to 19shapij 0 = shapij 1 = shapij 2 = shapij 3排序后的結果仍然存儲在shape數組中。4、StatusEvaluation 類的實現StatusEvaluate類對StatusSort類排序過的棋勢進行評估,為對弈時電腦擇位落子提供依據。StatusEvaluate類的類圖如圖 8所示。StatusEva

17、luatemaxmax_xmax_ystatusE wl uate(int shape)圖 8 StatusEvaluate 類類圖其中,StatusEvaluate 類也只有一個方法 statusEvaluate(),參數 shape 即為 StatusSort 類 排序后的棋勢,該方法主要是根據棋盤上每一個位置(i, j)的棋勢數據shapij0、shapij1、shapij2以及shapij3的取值,計算該位置的棋勢評估值,并保存在 shapij4中。此外,還要比較每一個位置的棋勢評估值,將最大的評估值記錄在屬性max中,相應的位置坐標記錄在max_x和max_y中。5、RandomPl

18、ay類的實現RandomPlay類主要是在前兩步,棋勢尚未形成,在玩家落子后,電腦緊鄰玩家落子位 置,隨機落子。RandomPlay類的類圖如圖9所示。RadomPlayx jint yrandomPlay(int chesspad, int a, int b)圖9 RandomPlay類類圖其中,方法randomPlay()方法具體實現這一過程,屬性chesspad存儲目前棋盤上的落子情況,參數a、b即為玩家最近一次的落子位置。randomPlay()方法通過檢測隨機數的值,分別在緊鄰玩家落子(a, b)處的正上、正下、正左、正右、左下、右上、左上以及右下八個位 置中的一個位置落子,最終選取

19、的電腦落子位置,存儲在屬性x、y之中。6、五子棋系統的測試運行系統后,選擇“讓讓電腦也無妨”,單擊“人機對戰,快沖啊”,開始游戲。游戲過 程中,能夠正確顯示相關的游戲信息,如圖10所示。圖10系統運行截圖從圖中,可以看到“就不告訴你是誰贏了”標簽顯示的勝負信息“五子連珠白棋贏了” 而就不告訴你這是第幾步”標簽顯示進度信息這是第13步”。進一步生成了可執行文件五子棋.jar,如圖11所示,可執行文件將與實驗報告、源代碼一并提交。Execut able Jar FildP6 KBf圖11系統生成的可執行五子棋文件五、分析與總結通過五子棋實驗,從分析、設計、編程、調試,到最后運行成功,自己得到了很多的鍛*實驗報告實驗名稱:實驗3訪問控制學 員:閆慧寧學號:09060100培養類型:軍人碩士研究生年級:研一專 業:計算機科學與技術 所屬學院:計算機學院指導教員:任江春職稱:講師實驗室:103-南201 實驗日期: 2010 春國防科學技術大學訓練部制六、附錄附

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論