java 五子棋遊戲

來源:互聯網
上載者:User

標籤:

五子棋遊戲

一,1.五子棋的基本常識

與任何一種競技棋一樣,五子棋的每一局棋也分為三個階段:開局,中局和殘局。

五子棋的開始階段稱為開局,或稱布局。其開局階段是十分短暫的,大約在七著與十幾著之間。在這一階段的爭奪中,雙方的布局,應對將對以後的勝負起著極為關鍵的作用。在開局階段取得的形勢好壞,主動與被動,先手與後手的優劣程度,往往直接影響中局的戰鬥。因此積極處理好開局和開局向中局的過渡十分重要。

五子棋是從一至五,逐漸布子,發展連繫,同時運用限制和反限制的智慧,在連子的過程中為自己的棋子爭得相對的主動權和優勢,逐步擴充優勢,或者從劣勢轉化為優勢,擊潰對方的防線,最後連五取勝或抓禁手取勝或迫使對方投子認負。

2、五子棋比賽的相關規定

(1) 職業連珠規則

a. 黑方先下子,白後下,從天元開始相互順序落子。

b. 最先在棋盤橫向、豎向、斜向形成連續的相同色五個棋子的一方為勝。

c. 黑棋禁手判負,白棋無禁手。黑棋禁手包括“三三”(包括“四三三”)、“四四”(包括“四四三”)、“長連”。即黑棋只能以“四三”取勝。 有關術語解釋請見圖示說明。

d. 如分不出勝負,則定為平局。對局中拔子、中途退場均判為負。

e. 五連與禁手同時形成,判勝。

(2) 比賽中的規定和特例

a. 對局開始前,雙方猜子,大數減小數,單數交換,偶數不換。

b. 白棋第一手(即盤面第二著棋)應在天元為界自己一側布子,主要以示尊重對方,之後雙方可任意行子。

c. 對局中雙方應遵守“職業連珠五子棋規則”,如出現爭議,應由裁判判定。 

 

d. 對局中掉子(棋子掉落在棋盤上)的一方判負。如遇推子或蹭子,以盤面第一落點為準。用手將棋子扶正不算違規。

e. 對局中應禮貌行棋,防止不正常聲音、動作影響對方思考。

f.. 比賽結束後,雙方應將各自棋子放回原處。

g. 對局中如黑方出現禁手,白方應立即指出禁手點,黑方即負。如白方在黑方出現禁手後,又下一步白子,黑棋禁手則不成立了。

h. 比賽對局時間,雙方分別為15分鐘、1小時、2小時、5小時四個等級標準,逾時判負。

(3) 特殊規定

職業五子棋雖然對黑棋採取了種種限制,但黑子先行的優勢依然很大。因此,在高段位的職業比賽中,又出現了三種特殊的規定。

a. 指定打法:是指比賽雙方按照約定好的開局進行對弈,由白棋先行。

b. 三手可交換:是指黑棋下盤面第3手棋後,白方在下第四手之前,如感覺黑方棋形不利於己方,可提出交換,即執白棋一方變為執黑棋一方,而黑方不可以不換。

c. 五手兩打法:是指黑棋在下盤面上關鍵的第5手棋時,必須下兩步棋,讓白棋在這兩步棋中拿掉一粒棋子,然後再繼續對弈。一般說來,白棋肯定拿掉對白方不利的一點,而保留對黑方較為不利的那點讓黑方行棋。

二 ,代碼地址 https://github.com/kongxiangyu/test/tree/master

三,

1、系統用例模型設計

 

五子棋系統應該具有選擇玩家先落子還是電腦先落子的功能,應該具有開始遊戲和重新開始的功能,當然了,必須具有在玩家指定位置落子的功能。以上描述,用使用案例圖在圖1中做進一步描述。這部分功能,主要通過介面與系統的互動來實現。

各個用例,簡單描述如下:

l 選擇電腦先落子:選擇後,在遊戲過程中,由電腦執黑子,先落子;玩家執白子,於電腦後落子;

l 選擇玩家先落子:選擇後,在遊戲過程中,由玩家執黑子,先落子;電腦執白子,於玩家後落子;

l 落子:原則上說,只要不違反禁手規則,在玩家滑鼠點擊最近的落子點落子,但是在本系統中,簡單起見,沒有考慮禁手規則;

l 開始遊戲:選擇後,根據設定的電腦還是玩家先落子,開始遊戲;

l 重新開始:在遊戲途中,可以選擇重新開始,中斷遊戲並重新開始遊戲。

同時,五子棋系統本身應該具有棋盤繪製、棋勢掃描、棋勢排序、棋勢評估、擇位落子,以及勝負判定的功能,尤其是對於棋勢排序、棋勢評估和擇位落子,這裡是體現五子棋系統人工智慧(AI)的關鍵之處。以上描述,用使用案例圖在圖2中進一步描述。

l 棋盤繪製:繪製19*19的棋盤及相關按鈕和選項,並負責電腦、玩家落子後棋子的具體繪製;

l 棋勢掃描:掃描目前棋盤上的所有八個方向上的落子情況,擷取整個對弈雙方的棋勢;

l 棋勢排序:對擷取的八個方向的棋勢(實際上下合一,左右合一,左下右上合一,坐上右下合一,為四個方向),進行排序,便於進行棋勢評估;

l 棋勢評估:分別對電腦和玩家的棋勢進行評估,量化棋勢;

l 擇位落子:比較電腦和玩家的棋勢,若有利於玩家,則採取“守、堵”的策略,若有利於電腦,則採取“攻、走”的策略;

l 勝負判定:每次電腦或是玩家落子後,判斷勝負情況,若出現“五子連珠”,則“連珠”一方取勝,另一方失敗,遊戲結束。

3、系統模組設計

為了實現五子棋系統本身具有的功能,將系統分為這幾個模組:五子棋主模組、棋勢掃描模組、棋勢排序模組、棋勢評估模組以及隨機落子模組。其中,五子棋主模組實現棋盤繪製、勝負判定的功能,以及對弈過程中對比雙方棋勢的擇位落子模組。棋勢掃描模組、棋勢排序模組、棋勢評估模組分別實現棋勢掃描、棋勢排序、棋勢評估的功能;而隨機落子模組則實現在前兩步棋勢尚未形成時,電腦緊鄰玩家落子位置隨機擇位落子的功能,是使用案例圖中擇位落子功能的一部分。

對應的,系統一共有五個類,分別對應五個模組;分別為:五子棋主模組Gobang類、棋勢掃描StatusScan類、棋勢排序StatusSort類、棋勢評估StatusEvaluation類,以及隨機落子RandomPlay類。

 

四、五子棋的實現與測試

 

1、Gobang類的實現

 

Gobang類是五子棋的核心類,棋盤繪製、棋子落子,響應事件的處理,遊戲的控制和模式設定,勝負判定,以及對棋勢掃描、排序、評估等的調用都在這裡實現。Gobang類的類圖。

 

 

 

 

 

 

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

 

2、StatusScan類的實現

 

StatusScan類通過掃描目前棋盤上的所有八個方向上的落子情況,擷取整個對弈雙方的棋勢。StatusScan類的類圖。

 

 

 

 

 

 

 

 

其中三維數組shape為一個20*20*5的數組,用來儲存所擷取的整個對弈雙方的棋勢。當然了,在實際實現中,執行個體化了兩個StatusScan類的對象scanp和scanc,這兩個對象分別用來儲存玩家的棋勢和電腦的棋勢。而statusScan()方法具體實現從棋盤上擷取整個棋勢的具體過程,參數chesspad儲存棋盤上的詳細落子情況,參數colour決定需要擷取的是黑方的棋勢還是白方的棋勢。具體掃描時,對於棋盤(i, j)處,有上下、左右、左下右上、坐上右下八個方向,但是統計時,將上下、左右、左下右上、左上右下分別合一,則一共有四個結果,分別儲存在shape[i][j][0]、shape[i][j][1]、shape[i][j][2]、shape[i][j][3]中。

 

3、StatusSort類的實現

 

StatusSort類對StatusScan類掃描得到的棋勢進行排序,以便於做進一步的棋勢評估。StatusSort類的類圖。

 

 

 

 

 

其中,StatusSort類只有一個方法statusSort(),參數shape即為StatusScan類掃描擷取的棋勢資料,該方法主要是對shape中的棋勢資料進行排序,使得shape數組滿足以下條件:

 

 

 

排序後的結果仍然儲存在shape數組中。

 

4、StatusEvaluation類的實現

 

StatusEvaluate類對StatusSort類排序過的棋勢進行評估,為對弈時電腦擇位落子提供依據。StatusEvaluate類的。

 

 

 

 

其中,StatusEvaluate類也只有一個方法statusEvaluate(),參數shape即為StatusSort類排序後的棋勢,該方法主要是根據棋盤上每一個位置(i, j)的棋勢資料shap[i][j][0]、shap[i][j][1]、shap[i][j][2]以及shap[i][j][3]的取值,計算該位置的棋勢評估值,並儲存在shap[i][j][4]中。此外,還要比較每一個位置的棋勢評估值,將最大的評估值記錄在屬性max中,相應的位置座標記錄在max_x和max_y中。

 

5、RandomPlay類的實現

 

RandomPlay類主要是在前兩步,棋勢尚未形成,在玩家落子後,電腦緊鄰玩家落子位置,隨機落子。RandomPlay類的類圖

 

 

 

 

 

其中,方法randomPlay()方法具體實現這一過程,屬性chesspad儲存目前棋盤上的落子情況,參數a、b即為玩家最近一次的落子位置。randomPlay()方法通過檢測隨機數的值,分別在緊鄰玩家落子(a, b)處的正上、正下、正左、正右、左下、右上、左上以及右下八個位置中的一個位置落子,最終選取的電腦落子位置,儲存在屬性x、y之中。

 

6、五子棋系統的測試

 

運行系統後,選擇“讓讓電腦也無妨”,單擊“人機對戰,快衝啊”,開始遊戲。遊戲過程中,能夠正確顯示相關的遊戲資訊,10所示。

 

 

 

運行

 

五,問題及解決方案、心得體會

 

通過五子棋實驗,從分析、設計、編程、調試,到最後運行成功,自己得到了很多的鍛煉。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

java 五子棋遊戲

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.