【摘要】在Windows平臺下,系統(tǒng)把五子棋游戲作為研究對象,運(yùn)用java語言設(shè)計一款能夠?qū)崿F(xiàn)人機(jī)對戰(zhàn)的簡單游戲。五子棋人機(jī)對弈是計算機(jī)博弈中的一種。而計算機(jī)博弈是人工智能研究的一個重要分支,其中還包括幾個重要的搜索算法。只有通過一定的研究,才能實現(xiàn)五子棋的人機(jī)對戰(zhàn)功能。
【關(guān)鍵詞】人工智能;計算機(jī)博弈;搜索算法;五子棋
一、研究內(nèi)容
本游戲是在Windows環(huán)境下完成一個簡易五子棋游戲的設(shè)計。五子棋是人工智能的一個成果之一,它涉及到計算機(jī)博弈理論,棋盤表示、走法生成以及搜索算法等知識,最終實現(xiàn)人機(jī)對戰(zhàn)。
二、五子棋的整體設(shè)計介紹
一個好的軟件產(chǎn)品,首先是要有一個好的人機(jī)界面,也就是說給人的第一感覺是美好的、輕松的。接著是簡單明了的操作,界面上按鈕夠少,令玩家容易上手。
1、人機(jī)界面的生成
背景圖片的大小要適中,否則后面的一些功能無法顯示出來(比如相應(yīng)的按鈕)在創(chuàng)建完成一個基本窗口后,將游戲背景圖片和棋盤加載進(jìn)窗口界面,并加入相應(yīng)的控制按鍵,就得到了一個簡單的棋盤。
2、按鈕功能的實現(xiàn)
Java中的鼠標(biāo)和鍵盤事件,使用Mouse Listener接口處理鼠標(biāo)事件。鼠標(biāo)事件有5種:按下鼠標(biāo)鍵,釋放鼠標(biāo)鍵,點擊鼠標(biāo)鍵,鼠標(biāo)進(jìn)入和鼠標(biāo)退出。
三、五子棋的AI算法
在本系統(tǒng)的AI算法里,當(dāng)玩家下棋時,電腦優(yōu)先考慮阻止玩家取得勝利,在這個過程中,電腦首先在各個方向進(jìn)行搜索,尋找其中最優(yōu)的位置進(jìn)行下棋,以達(dá)到阻止玩家獲得勝利的目的。
1、電腦智能下棋
電腦通過打擂計算最佳進(jìn)攻和防守位置,代碼片段如下:
for(int i=0;i< allChesses.length;i++){//通過計算得到防守的最佳位置,因為是防守,所以統(tǒng)計白色
for(int j=0;j<allChesses.length;j++){
if(allChesses[i][j]==null){//對還沒有走的空棋格進(jìn)行統(tǒng)
if(isFirst==true){//第一個為空的空格
row=i;//在棋盤中的位置
col=j;
powerValue=RowPowerValue(allChesses,i,j,Color.white)
+ColPowerValue(allChesses, i, j,Color.white)
+RightBiasPowerValue(allChesses,i,j,Color.white)
+LeftBiasPowerValue(allChesses,i,j,Color.white);//計算當(dāng)前位置的權(quán)值
isFirst=false;//表示第一個位置計算完畢
}
2、游戲勝負(fù)的判斷
電腦主要是從八個方向來判斷哪一方先勝利了,這八個方向是以一個棋子為中心,向四周輻射擴(kuò)散出去進(jìn)行搜索判斷,這八個方向分別是以該棋子為中心的右斜上、右斜下、左斜上、左斜下、列下、列上、列左和行右。每一個方向都設(shè)一個參數(shù)count i,初值為1,每判斷一次,如果有相同的棋子,則count i的值增加1,如果有五個或五個以上,則該方為勝。代碼片段如下:
public boolean checkLeftBias(int row,int col){//檢查左斜
int leftBiasUp=checkLeftBiasUp(row, col);//得到左斜上的個數(shù)
int leftBiasDown=checkLeftBiasDown(row, col);//得到右斜下的個數(shù)
int sum=leftBiasUp+leftBiasDown-1;//在計算過程中多算了一顆棋子,所以要減一顆棋子
if(sum>=5){//已經(jīng)五子連珠
return true;
}
else{
return false;
}
}
四、結(jié)語
人工智能在計算機(jī)上實現(xiàn)時,有2種不同的方式。一種是采用傳統(tǒng)的編程技術(shù),使系統(tǒng)呈現(xiàn)智能的效果,而不考慮所用方法是否與人或動物機(jī)體所用的方法相同。這種方法叫工程學(xué)方法(Engineerin gapproach),它已在一些領(lǐng)域內(nèi)做出了成果,如文字識別、電腦下棋等。另一種是模擬法(Modeling approach),它不僅要看效果,還要求實現(xiàn)方法也和人類或生物機(jī)體所用的方法相同或相類似。而我設(shè)計的五子棋游戲正是通過第一種方法實現(xiàn)的——工程學(xué)方法。了解這些還是遠(yuǎn)遠(yuǎn)不夠的,最重要的是了解計算機(jī)博弈方面相關(guān)的搜索算法。由于我對java方面的知識了解的不多,所以也花了很多的時間在學(xué)習(xí),可以說是邊學(xué)邊用了。
【參考文獻(xiàn)】
[1] 張孝祥. Java就業(yè)培訓(xùn)教程[M]. 北京: 清華大學(xué)出版社, 2003.
[2] Negnevitsky, M. 人工智能智能系統(tǒng)指南(英文版)[M]. 北京: 機(jī)械工業(yè)出版社, 2005.
[3] 朱福喜. Java語言基礎(chǔ)教程[M]. 北京: 清華大學(xué)出版社, 2008.
【作者簡介】
關(guān)寧(1994—),女,滿族,吉林永吉人,西北師范大學(xué)在讀本科生。