人工智能課程設(shè)計(jì)報(bào)告五子棋_第1頁(yè)
人工智能課程設(shè)計(jì)報(bào)告五子棋_第2頁(yè)
人工智能課程設(shè)計(jì)報(bào)告五子棋_第3頁(yè)
人工智能課程設(shè)計(jì)報(bào)告五子棋_第4頁(yè)
人工智能課程設(shè)計(jì)報(bào)告五子棋_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、五子棋簡(jiǎn)介需求分析主要名詞說(shuō)明主要算法程序運(yùn)行界面展示不足說(shuō)明心得體會(huì) 、五子棋簡(jiǎn)介選擇五子棋游戲作為本設(shè)計(jì)的課題,是因?yàn)樵撚螒虻囊?guī)則簡(jiǎn)單,所涉及的方向比較少。這樣才能將問(wèn)題的重點(diǎn)放在人工智能解決上,而非規(guī)則的解決,有更多的精力放在高效算法的優(yōu)化。希望能通過(guò)本次系統(tǒng)的設(shè)計(jì),整合所學(xué)的知識(shí),實(shí)現(xiàn)從理論到實(shí)踐上的升華。五子棋是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一。現(xiàn)代五子棋日文稱之為“連珠”,英譯為“”,英文稱之為“”或“”的縮寫(xiě),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。它不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“

2、短、平、快”又有古典哲學(xué)的高深學(xué)問(wèn)“陰陽(yáng)易理”;它既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜聞樂(lè)見(jiàn),又有深?yuàn)W的技巧和高水平的國(guó)際性比賽;它的棋文化源淵流長(zhǎng),具有東方的神秘和西方的直觀;既有“場(chǎng)”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。五子棋的規(guī)則如下:棋盤(pán):采用5的棋盤(pán)。下法:兩人分別執(zhí)黑白兩色棋子,輪流在棋盤(pán)上選擇一個(gè)無(wú)子的交叉點(diǎn)落子。輸贏判斷:黑、白雙方有一方的個(gè)棋子在橫、豎或斜方向上連接成一線即為該方贏。2需求分析作為五子棋的設(shè)計(jì)需要考慮到的最基本的需求莫過(guò)于人機(jī)對(duì)戰(zhàn)功能的實(shí)現(xiàn),當(dāng)然還有下棋過(guò)程中的悔棋功能以及判斷游戲的勝負(fù)等方面的要求。當(dāng)然最好是要考慮到界面的友好性,

3、作為一個(gè)娛樂(lè)軟件,還應(yīng)該考慮到玩家在游戲時(shí)的舒適性,比如可以考慮加入一些背景音樂(lè)和音效。3主要名詞說(shuō)明棋盤(pán)數(shù)據(jù)這是一個(gè)的二位數(shù)組,用來(lái)保存當(dāng)前棋盤(pán)的落子數(shù)據(jù)。其中對(duì)于每個(gè)成員來(lái)說(shuō),表示落黑子,表示落白子,表示無(wú)子。清空棋盤(pán)在每一局游戲開(kāi)始的時(shí)候都需要調(diào)用這個(gè)函數(shù)將棋盤(pán)清空,也就是棋盤(pán)的初始化工作。這個(gè)函數(shù)主要將中每一個(gè)落子位都置為無(wú)子狀態(tài)()。初始化操作對(duì)于人機(jī)對(duì)弈而言,初始化操作包括以下幾個(gè)步驟:(1)初始化所有的獲勝組合。(2)如果是計(jì)算機(jī)先走,則占據(jù)天元(棋盤(pán)正中央)的位置。繪制棋子一一這是很重要的一個(gè)函數(shù),它根據(jù)參數(shù)給定的坐標(biāo)和顏色繪制棋子。繪制的詳細(xì)過(guò)程如下:()將給定的棋盤(pán)坐標(biāo)換算

4、為繪圖的像素坐標(biāo)。()根據(jù)坐標(biāo)繪制棋子位圖。()如果先前曾下過(guò)棋子,則利用將上一個(gè)繪制棋子上的最后落子指示矩形擦除。()在剛繪制完成的棋子四周繪制最后落子指示矩形。左鍵消息作為棋盤(pán)唯一響應(yīng)的左鍵消息,也需要做不少的工作:()如果點(diǎn)擊時(shí)的鼠標(biāo)坐標(biāo)在合法坐標(biāo)之外,亦禁止落子。()如果走的步數(shù)大于步,則允許悔棋。繪制棋盤(pán)一一每當(dāng)消息觸發(fā)時(shí),都需要對(duì)棋盤(pán)進(jìn)行重繪。作為響應(yīng)繪制消息的消息處理函數(shù)使用了雙緩沖技術(shù),減少了多次繪圖可能導(dǎo)致的圖像閃爍問(wèn)題。這個(gè)函數(shù)主要完成了以下工作:()裝載棋盤(pán)位圖并進(jìn)行繪制。()根據(jù)棋盤(pán)數(shù)據(jù)繪制棋子。()繪制最后落子指示矩形。勝負(fù)的判斷這是游戲中一個(gè)極其重要的算法,用來(lái)判斷

5、當(dāng)前棋盤(pán)的形勢(shì)是哪一方獲勝。其詳細(xì)內(nèi)容請(qǐng)參見(jiàn)“主要算法”一節(jié)?;谄宀僮饕?yàn)槭侨藱C(jī)對(duì)弈,所以計(jì)算機(jī)是完全允許玩家悔棋的,但是出于對(duì)程序負(fù)荷的考慮,只允許玩家悔當(dāng)前的兩步棋(計(jì)算機(jī)一步,玩家一步)。、主要算法判斷勝負(fù)五子棋的勝負(fù),在于判斷棋盤(pán)上是否有一個(gè)點(diǎn),從這個(gè)點(diǎn)開(kāi)始的橫豎斜四個(gè)方向是否有連續(xù)的五個(gè)同色棋子出現(xiàn),如圖這個(gè)算法就是Win函數(shù)。從設(shè)計(jì)的思想上,需要它接受一個(gè)棋子的參數(shù),然后返回一個(gè)值,這個(gè)值來(lái)指示是否勝利,代碼如下:intx,y;for(y=0;y15;y+)/判斷橫向for(x=0;x11;x+)if(color=m_dataxy&color=m_datax+1y&color=m_

6、datax+2y&color=m_datax+3y&color=m_datax+4y)returnTRUE;for(y=0;y11;y+)/判斷縱向for(x=0;x15;x+)if(color=m_dataxy&color=m_dataxy+1&color=m_dataxy+2&color=m_dataxy+3&color=m_dataxy+4)returnTRUE;for(y=0;y11;y+)/判斷“”方向for(x=0;x11;x+)if(color=m_dataxy&color=m_datax+1y+1&color=m_datax+2y+2&color=m_datax+3y+3&co

7、lor=m_datax+4y+4)returnTRUE;for(y=0;y11;y+)/判斷“/”方向for(x=4;x15;x+)if(color=m_dataxy&color=m_datax-1y+1&color=m_datax-2y+2&color=m_datax-3y+3&color=m_datax-4y+4)returnTRUE;returnFALSE;/不滿足勝利條件需要說(shuō)明的一點(diǎn)是,由于搜索順序是從左到右、自上而下,因此在每次循環(huán)的時(shí)候,都有一些坐標(biāo)無(wú)需納入考慮范圍。例如對(duì)于橫向判斷而言,由于右邊界所限,因而所有橫坐標(biāo)大于等于11的點(diǎn),都構(gòu)不成達(dá)到五子連的條件,所以橫坐標(biāo)的循環(huán)上

8、界也就定為11,這樣就提高了搜索的速度。獲勝組合獲勝組合是一個(gè)三維數(shù)組,它記錄了所有獲勝的情況。也就是說(shuō),參考于Win中的情況,對(duì)于每一個(gè)落子坐標(biāo),獲勝的情況一共有15*11*2+11*11*2=572種,而對(duì)于每個(gè)坐標(biāo)的獲勝組合,應(yīng)該設(shè)置一個(gè)1515572大小的三維數(shù)組。在擁有了這些獲勝組合之后,就可以參照每個(gè)坐標(biāo)的572種組合給自己的局面和玩家的局面進(jìn)行打分,也就是根據(jù)當(dāng)前盤(pán)面中某一方所擁有的獲勝組合多少進(jìn)行權(quán)值的估算,給出最有利于自己的一步落子坐標(biāo)。在每次游戲初始化(Init)的時(shí)候,需要將每個(gè)坐標(biāo)下可能的獲勝組合都置為true。由于是雙方對(duì)弈,所以游戲的雙方都需要一份獲勝組合,也就是:

9、boolm_Computer1515572;/電腦獲勝組合boolm_Player1515572;/玩家獲勝組合落子后處理每當(dāng)一方落子后,都需要作如下處理:如果己方此坐標(biāo)的獲勝組合仍為true,且仍有可能在此獲勝組合處添加棋子,則將此獲勝組合添加棋子數(shù)加1;如果對(duì)方此坐標(biāo)的獲勝組合仍為true,則將對(duì)方此坐標(biāo)的獲勝組合置為false,并將對(duì)方此獲勝組合添加棋子數(shù)置為-1。以玩家落子為例,代碼為:for(i=0;i572;i+)if(m_PlayerstepPut.xstepPut.yi&m_Win0i!=-1)/修改狀態(tài)變化m_Win0i+;if(m_ComputerstepPut.xstep

10、Put.yi)m_ComputerstepPut.xstepPut.yi=false;m_Win1i=-1;查找棋盤(pán)空位在計(jì)算機(jī)落子之前,需要查找棋盤(pán)的空位,所以需要一個(gè)SearchBlank成員函數(shù)完成此項(xiàng)工作,此函數(shù)需要進(jìn)行不重復(fù)的查找,也就是說(shuō),對(duì)已查找過(guò)的空位進(jìn)行標(biāo)記,并返回找到空位的坐標(biāo),其代碼如下:boolCOneGame:SearchBlank(int&i,int&j,intnowTable15)intx,y;for(x=0;x15;x+)for(y=0;y15;y+)if(nowTablexy=-1&nowTablexy!=2)i=x;j=y;returntrue;return

11、false;落子打分找到空位后,需要對(duì)這個(gè)點(diǎn)的落子進(jìn)行打分,這個(gè)分?jǐn)?shù)也就是這個(gè)坐標(biāo)重要性的體現(xiàn),代碼如下:intCOneGame:GiveScore(constSTEP&stepPut)inti,nScore=0;for(i=0;iGetColor()=stepPut.color)if(m_PlayerstepPut.xstepPut.yi)/玩家下switch(m_Win0i)case1:nScore-=5;break;case2:nScore-=50;break;case3:nScore-=500;break;case4:nScore-=5000;break;default:break;e

12、lseif(m_ComputerstepPut.xstepPut.yi)/計(jì)算機(jī)下switch(m_Winli)case1:nScore+=5;break;case2:nScore+=50;break;case3:nScore+=100;break;case4:nScore+=10000;break;default:break;returnnScore;如代碼所示,考慮到攻守兩方面的需要,所以將玩家落子給的分?jǐn)?shù)置為負(fù)值。防守策略落子的考慮不單單要從進(jìn)攻考慮,還要從防守考慮。這一細(xì)節(jié)的實(shí)現(xiàn)其實(shí)就是讓計(jì)算機(jī)從玩家棋盤(pán)布局分析戰(zhàn)況,然后找出對(duì)玩家最有利的落子位置。整個(gè)過(guò)程如下:for(m=0;mGe

13、tColor();step.x=i;step.y=j;ptemp=GiveScore(step);if(pscoreptemp)pscore=ptemp;for(m=0;mcscore)cscore=ctemp+pscore;bestx=pi;besty=pj;在這之后,重新改變一下棋盤(pán)的狀態(tài)(4.3)即可。 5、程序運(yùn)行界面展示r坯知1口步落子,所以如果玩家在開(kāi)局的時(shí)候不改變落子,使對(duì)弈過(guò)程更 # ()可能的話增加一些背景音樂(lè)功能;可以增加保存棋局,以便于調(diào)用觀看。()人機(jī)算法部分中的評(píng)估函數(shù),也需要調(diào)整使得其更加的智能。算法有個(gè)缺點(diǎn)就是當(dāng)棋盤(pán)上的棋子相當(dāng)?shù)臅r(shí)候,比如雙方都存在活三,它會(huì)調(diào)用評(píng)估函數(shù)向前預(yù)測(cè),算出雙方的值相當(dāng)。于是就不選擇自己連四。可以說(shuō)這是很大的敗筆,不過(guò)可以寫(xiě)個(gè)函數(shù)進(jìn)行修補(bǔ)。(4總體感覺(jué)系統(tǒng)可維護(hù)性很差,應(yīng)該盡可能的使用常量代替具體數(shù)據(jù)。這樣更利于后期的維護(hù),避免牽一發(fā)而動(dòng)全身。、心得體會(huì)在剛開(kāi)始編寫(xiě)這個(gè)程序的時(shí)候,我幼稚地認(rèn)為其中最重要的是博弈算法。但是頭幾天編寫(xiě)程序的時(shí)候卻發(fā)現(xiàn)程序越寫(xiě)越不容易維護(hù),可見(jiàn)是我走錯(cuò)了方向。后來(lái)我向幾位真正的高手討教,他們告訴我:我們的先人早已為我們準(zhǔn)備好了各種精良可用的現(xiàn)成算法,我們所要做的就

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論