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