


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、8.2電腦下棋算法設(shè)計(jì)本款游戲最核心的地方就是算法,因?yàn)檫@是整個(gè)程序最難的模塊。算法的中心思想是:利用分?jǐn)?shù)代表每個(gè)位置的重要程度, 越重要的位置的分?jǐn)?shù)值會(huì)越高, 當(dāng)電腦下棋時(shí)會(huì)先將電 腦和玩家棋型的分?jǐn)?shù)分別計(jì)算一遍,然后選擇二者中分?jǐn)?shù)最高的點(diǎn)下子。如果玩家的分?jǐn)?shù)高, 那么代表電腦應(yīng)該防守,如果電腦的分?jǐn)?shù)高,那么代表電腦應(yīng)該進(jìn)攻。具體的分?jǐn)?shù)值賦值如下:分?jǐn)?shù)電腦玩家活二6050半活二4035死二1010半死二1010活三950700半活三900650死三100100半死三100100活四60003500半活四50003000死四4000800半死四3600750活五2000015000半活五100
2、003300死五2000015000半死五100003300解釋一下其中的活,半活,死,半死:活:代表幾個(gè)子是相連的,中間沒有空格,兩端都至少有一個(gè)空格。半活:代表幾個(gè)子不是相連的,幾個(gè)子中間有一個(gè)空格,兩端都至少有一個(gè)空格。死:代表幾個(gè)子是相連的,中間沒有空格,但有一端緊挨著對(duì)方的棋子或有一端正好在棋盤的邊界。半死:代表幾個(gè)子不是相連的,幾個(gè)子中間有一個(gè)空格,而且一端緊挨著對(duì)方的棋子或有一端正好在棋盤的邊界。每個(gè)位置的分?jǐn)?shù)的計(jì)算方式是各個(gè)方向的分?jǐn)?shù)相加,最后找出電腦棋型和玩家棋型的分?jǐn)?shù)的最高的位置為電腦的下棋點(diǎn)下棋。具體的代碼如下:public void qixi ng()for ( int
3、 i=0;i<17;i+)for ( int j=0;j<17;j+)if (qipan i+1j+1=0)/ 說明此處沒有棋子qix in gPCij=heiheng(i,j,2)+heishu(i,j,2)+heizuoxie(i,j,2)+heiyouxie(i,j,2);qixingPlayer ij =heiheng(i,j,1)+heishu(i,j,1)+heizuoxie(i,j,1)+heiyouxie(i,j,1); else qixingPC ij = 0; qixingPlayerij = 0; / 算出黑子橫方向的棋型數(shù)值public int heihen
4、g( int hang, int lie, int num)int k = 0; / 記錄空白處的個(gè)數(shù)int count = 1;/ 記錄可以形成幾連int n = hang+1;/ 對(duì)應(yīng)棋盤的行int m = lie+1;/ 對(duì)應(yīng)棋盤的列qipan nm-1=0)boolean left = false ; / 判斷左邊是否有黑子 boolean liveLeft = false ; / 判斷左邊是活還是死 boolean liveRight =false ; / 判斷右邊是活還是死while ( qipan nm-1!=-1)&&( qipan nm-1=num| )if
5、( qipan nm-1=0&&k<1) / 第一個(gè)空白 if ( qipan nm-2!=num) liveLeft = true ; break ;k+;m-; else if ( qipan nm-1=num) / 黑子 left = true ;m-; else / 第二個(gè)空白 liveLeft = true ; break ;if (!left)k = 0;m = lie+1;while ( qipan nm+1!=-1)&&(qipan nm+1=num|qipan nm+1=0)int t = qipan nm+1;if (m=lie)cou
6、nt+;m+; continue ;if (t=0&&k<1) / 第一個(gè)空白if ( qipan nm+2!=num) liveRight = true ; break ;k+;m+; else if (t=0&&k>0) / 第二個(gè)空白 liveRight = true ; break ; else / 黑子m+; count+;return jieguo(liveLeft,liveRight,count,k,num);/ 算出黑子豎方向的棋型數(shù)值publicint heishu(int hang, int lie, int num)intk =
7、 0; /記錄空白處的個(gè)數(shù)intcount = 1;/ 記錄可以形成幾連intn = hang+1;/ 對(duì)應(yīng)棋盤的行intm = lie+1;/ 對(duì)應(yīng)棋盤的列boolean top =false ; / 判斷上邊是否有黑子n-1m=0)boolean liveLeft = false boolean liveRight = falsewhile ( qipan n-1m!=-1)&&( qipan n-1m=num| qipan )if ( qipan n-1m=0&&k<1) / 第一個(gè)空白if ( qipan n-2m!=num) liveLeft =
8、true ;break ;k+;n-; else if ( qipan n-1m=num) / 黑子 top = true ;n-; else /第二個(gè)空白liveLeft =true ;break ;if (!top)k = 0;n = han g+1;n+1m=0)while ( qipan n+1m!=-1)&&(qipan n+1m=num|qipan)int t = qipa n n+1m;if (n=hang)cou nt+;n+;con ti nue ;if (t=0&&k<1)/ 第一個(gè)空白if ( qipan n+2m!=num)live
9、Right =true ;break ;k+;n+; else if (t=0&&k>0)/ 第二個(gè)空白liveRight = true ;break ; else / 黑子n+;cou nt+;/retur n jieguo(k=O,cou nt);retur njieguo(liveLeft,liveRight,cou nt,k ,n um);/算出黑子左斜方向的棋型數(shù)值public int heizuoxie( int hang, int lie, int n um)int k = 0;/記錄空白處的個(gè)數(shù)int count = 1;/記錄可以形成幾連int n =
10、hang+1; / 對(duì)應(yīng)棋盤的行int m = lie+1;/ 對(duì)應(yīng)棋盤的列boolean top = false ; / 判斷上邊是否有黑子 boolean liveLeft =false ;qipann+1m-boolean liveRight =false ;while ( qipan n+1m-1!=-1)&&( qipan n+1m-1=num| 1=0)if ( qipan n+1m-1=0&&k<1) / 第一個(gè)空白if ( qipan n+2m-2!=num) liveLeft = true ; break ;k+;n+;m-; else
11、if ( qipan n+1m-1=num) / 黑子 top = true ;n+;m-; else / 第二個(gè)空白 liveLeft = true ; break ;if (!top)k = 0;n = hang+1;m = lie+1;n-1m+while ( qipan n-1m+1!=-1)&&( qipan n-1m+1=num| qipan 1=0)int t = qipan n-1m+1;if (n=(hang+2)&&m=lie)count+;n-;m+;continue ;if (t=0&&k<1) / 第一個(gè)空白if
12、( qipan n-2m+2!=num) liveRight = true ; break ;k+;n-;m+; else if (t=0&&k>0) / 第二個(gè)空白 liveRight = true ; break ; else / 黑子n-;m+;count+;return jieguo(liveLeft,liveRight,count,k,num);/ 算出黑子右斜方向的棋型數(shù)值publicint heiyouxie( int hang, int lie, int num)intk = 0; /記錄空白處的個(gè)數(shù)intcount = 1;/ 記錄可以形成幾連intn
13、= hang+1;/ 對(duì)應(yīng)棋盤的行intm = lie+1;/ 對(duì)應(yīng)棋盤的列boolean top =false ; / 判斷上邊是否有黑子boolean liveLeft = false boolean liveRight = falsewhile ( qipan n-1m-1!=-1)&&( qipan n-1m-1=num|qipan n-1m1=0)if ( qipan n-1m-1=0&&k<1) / 第一個(gè)空白if ( qipan n-2m-2!=num)liveLeft =true ;break ;k+;n-;m-; else if ( qi
14、pan n-1m-1=num) / 黑子top = true ;n-;m-; else / 第二個(gè)空白liveLeft = true ;break ;if (!top)k = 0;n = hang+1;m = lie+1;while ( qipan n+1m+1!=-1)&&( qipan n+1m+1=num| qipan 1=0)int t = qipan n+1m+1;if (n=hang&&m=lie)count+;n+;m+;continue ;if (t=0&&k<1) / 第一個(gè)空白if ( qipan n+2m+2!=num
15、) liveRight = true ; break ;k+;n+;m+; else if (t=0&&k>0) / 第二個(gè)空白liveRight = true ;break ; else / 黑子n+;m+;count+;return jieguo(liveLeft,liveRight,count,k,num);public int jieguo( boolean left, boolean right, int count, int num)if (count=1)return 0; else if (count=2)if (left&&right)i
16、f (k=0)n+1m+k, intif (num=2)return 60; else return 50; else if (num=2)return 40; else return 35; else if (!left&&!right)return 0; else return 10; else if (count=3)if (left&&right)if (k=0)if (num=2)return 950; else return 700; else if (num=2)return 900; else return 650; else if (!left&&!right)return 0; else return 100; else if (count=4)if (left&&right)if (k=0)if (num=2)return 6000; else return 3500; else if (num=2)return 500
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024育嬰師試題及答案大全
- 2024年高中地理的地理信息系統(tǒng)試題及答案
- 如何應(yīng)用馬工學(xué)減輕運(yùn)營成本試題及答案
- 2024年考試人力資源試題及答案
- 2024物流服務(wù)師選拔考題試題及答案
- 二年級(jí)上冊(cè)道德與法治教學(xué)設(shè)計(jì)-第11課 戴上安全小黃帽 第2課時(shí) 粵教版
- 2025年第三屆天揚(yáng)杯建筑業(yè)財(cái)稅知識(shí)競賽題庫附答案(1001-1100題)
- 中班游戲教案《捉迷藏》 月度范文
- 中班游戲活動(dòng)教案:舞龍教案
- 6《 我的牙齒我愛護(hù) 》(教學(xué)設(shè)計(jì))人民版勞動(dòng)一年級(jí)上冊(cè)
- 資本論第二卷講義課件
- 班組班前安全教育記錄表
- 教科版科學(xué)五年級(jí)下冊(cè)全冊(cè)全套課件【最新版】
- 胎兒頸項(xiàng)透明層(NT)的超聲診斷課件
- 工程移交單(標(biāo)準(zhǔn)樣本)
- 《最好的未來》合唱曲譜
- 常用材料折彎系數(shù)表大全
- 小班語言《坐火車》課件
- FIDIC合同《設(shè)計(jì)采購施工(EPC)交鑰匙工程合同條件》(中英文對(duì)照版)
- 環(huán)境監(jiān)測(cè)課件:第3章 空氣和廢氣監(jiān)測(cè)2
- 律師刑事訴訟格式文書一至十九
評(píng)論
0/150
提交評(píng)論