- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.2电脑下棋算法设计
本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是:
利用分数代表每个位置的重要程度, 越重要的位置的分数值会越高, 当电脑下棋时会先将电 脑和玩家棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高, 那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。
具体的分数值赋值如下:
分数
电脑
玩家
活二
60
50
半活二
40
35
死二
10
10
半死二
10
10
活三
950
700
半活三
900
650
死三
100
100
半死三
100
100
活四
6000
3500
半活四
5000
3000
死四
4000
800
半死四
3600
750
活五
20000
15000
半活五
10000
3300
死五
20000
15000
半死五
10000
3300
解释一下其中的活,半活,死,半死:
活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。
半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。
死:代表几个子是相连的, 中间没有空格,但有一端紧挨着对方的棋子或有一端正好在
棋盘的边界。
半死:代表几个子不是相连的, 几个子中间有一个空格, 而且一端紧挨着对方的棋子或
有一端正好在棋盘的边界。
每个位置的分数的计算方式是各个方向的分数相加, 最后找出电脑棋型和玩家棋型的分
数的最高的位置为电脑的下棋点下棋。
具体的代码如下:
public void qixi ng(){
for ( int i=0;i17;i++){
for ( int j=0;j17;j++){
if (qipan [i+1][j+1]==0){ // 说明此处没有棋子
qix in gPC [i][j]=
heiheng(i,j,2)+heishu(i,j,2)+heizuoxie(i,j,2)+heiyouxie(i,j,2);
qixingPlayer [i][j] =
heiheng(i,j,1)+heishu(i,j,1)+heizuoxie(i,j,1)+heiyouxie(i,j,1);
} else {
qixingPC [i][j] = 0; qixingPlayer [i][j] = 0; }
}
}
}
// 算出黑子横方向的棋型数值
public
int heihen
( int hang, int lie, int num){
int
k = 0; //
记录空白处的个数
int
count = 1;
// 记录可以形成几连
int
n = hang+1;
// 对应棋盘的行
int
m = lie+1;
// 对应棋盘的列
boolean left =
false ; // 判断左边是否有黑子
boolean liveLeft = false ; // 判断左边是活还是死 boolean liveRight = false ; // 判断右边是活还是死
[n][m-1]==0)while (( qipan [n][m-1]!=-1)( qipan [n][m-1]==num|| qipan ){
[n][m-1]==0)
if ( qipan [n][m-1]==0k1){ // 第一个空白
if ( qipan [n][m-2]!=num){ liveLeft = true ; break ;
}
k++;
m--;
} else if ( qipan [n][m-1]==num){ // 黑子
left = true ;
m--;
} else { // 第二个空白
liveLeft = true ;
break ;
}
}
if (!left){
k = 0;
m = lie+1;
while
(( qipan [n][m+1]!=-1)(
qipan [n][m+1]==num||
qipan [n][m+1]==0)
){
int t = qipan [n][m+1];
if (m==lie){
count++;
m++; continue ;
}
if (t==0k1){ // 第一个空白
if ( qipan [n][m+2]!=num){ liveRight = true ; break ;
}
k++;
m++;
} else if (t==0k0){ // 第二个空白 liveRight = true ; break ;
} else { // 黑子
m++; count++;
}
}
return jieguo(liveLeft,liveRight,count,k,num);
[n-1][m]==0)}
[n-1][m]==0)
// 算出黑子竖方向的棋型数值
public
您可能关注的文档
最近下载
- 血糖仪质控规则 .pdf VIP
- 中国矿业大学《学术英语》2021-2022学年第一学期期末试卷.doc VIP
- 2025年南京新工投资集团公司治理结构组织架构和部门职能.docx
- 组织胚胎学教学教案.doc VIP
- 2025年石家庄建设投资集团有限责任公司人员招聘笔试备考试题及答案解析.docx VIP
- 九年级英语感叹句.ppt VIP
- 第3单元第7课+中国传统色(课件)-2025-2026学年+赣美版(2024)初中美术八年级上册.pptx VIP
- Unit 6 How do you feel Part B 课件(共20张PPT)(含音频+视频).pptx VIP
- 拟任县处级党政领导职务政治理论水平任职资格考试第.doc VIP
- 《我们的互联网时代》知识梳理+考点精练(一)(原卷版).docx VIP
原创力文档


文档评论(0)