已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
8.2 电脑下棋算法设计本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是:利用分数代表每个位置的重要程度,越重要的位置的分数值会越高,当电脑下棋时会先将电脑和玩家棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高,那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。 具体的分数值赋值如下:分数电脑玩家活二6050半活二4035死二1010半死二1010活三950700半活三900650死三100100半死三100100活四60003500半活四50003000死四4000800半死四3600750活五2000015000半活五100003300死五2000015000半死五100003300解释一下其中的活,半活,死,半死:活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。死:代表几个子是相连的,中间没有空格,但有一端紧挨着对方的棋子或有一端正好在棋盘的边界。半死:代表几个子不是相连的,几个子中间有一个空格,而且一端紧挨着对方的棋子或有一端正好在棋盘的边界。每个位置的分数的计算方式是各个方向的分数相加,最后找出电脑棋型和玩家棋型的分数的最高的位置为电脑的下棋点下棋。具体的代码如下:public void qixing()for(int i=0;i17;i+)for(int j=0;j17;j+)if(qipani+1j+1=0)/说明此处没有棋子qixingPCij = heiheng(i,j,2)+heishu(i,j,2)+heizuoxie(i,j,2)+heiyouxie(i,j,2);qixingPlayerij = heiheng(i,j,1)+heishu(i,j,1)+heizuoxie(i,j,1)+heiyouxie(i,j,1);elseqixingPCij = 0;qixingPlayerij = 0;/ 算出黑子横方向的棋型数值public int heiheng(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;/判断右边是活还是死while(qipannm-1!=-1)&(qipannm-1=num|qipannm-1=0)if(qipannm-1=0&k1)/第一个空白if(qipannm-2!=num)liveLeft = true;break;k+;m-;else if(qipannm-1=num)/黑子left = true;m-;else/第二个空白liveLeft = true;break;if(!left)k = 0;m = lie+1;while(qipannm+1!=-1)&(qipannm+1=num|qipannm+1=0)int t = qipannm+1;if(m=lie)count+;m+;continue;if(t=0&k0)/第二个空白liveRight = true;break;else/黑子m+;count+;return jieguo(liveLeft,liveRight,count,k,num);/算出黑子竖方向的棋型数值public int heishu(int hang,int lie,int num)int k = 0;/记录空白处的个数int count = 1;/记录可以形成几连int n = hang+1;/对应棋盘的行int m = lie+1;/对应棋盘的列boolean top = false;/判断上边是否有黑子boolean liveLeft = false;boolean liveRight = false;while(qipann-1m!=-1)&(qipann-1m=num|qipann-1m=0)if(qipann-1m=0&k1)/第一个空白if(qipann-2m!=num)liveLeft = true;break;k+;n-;else if(qipann-1m=num)/黑子top = true;n-;else/第二个空白liveLeft = true;break;if(!top)k = 0;n = hang+1;while(qipann+1m!=-1)&(qipann+1m=num|qipann+1m=0)int t = qipann+1m;if(n=hang)count+;n+;continue;if(t=0&k0)/第二个空白liveRight = true;break;else/黑子n+;count+;/return jieguo(k=0,count);return jieguo(liveLeft,liveRight,count,k,num);/算出黑子左斜方向的棋型数值public int heizuoxie(int hang,int lie,int num)int k = 0;/记录空白处的个数int count = 1;/记录可以形成几连int n = hang+1;/对应棋盘的行int m = lie+1;/对应棋盘的列boolean top = false;/判断上边是否有黑子boolean liveLeft = false;boolean liveRight = false;while(qipann+1m-1!=-1)&(qipann+1m-1=num|qipann+1m-1=0)if(qipann+1m-1=0&k1)/第一个空白if(qipann+2m-2!=num)liveLeft = true;break;k+;n+;m-;else if(qipann+1m-1=num)/黑子top = true;n+;m-;else/第二个空白liveLeft = true;break;if(!top)k = 0;n = hang+1;m = lie+1;while(qipann-1m+1!=-1)&(qipann-1m+1=num|qipann-1m+1=0)int t = qipann-1m+1;if(n=(hang+2)&m=lie)count+;n-;m+;continue;if(t=0&k0)/第二个空白liveRight = true;break;else/黑子n-;m+;count+;return jieguo(liveLeft,liveRight,count,k,num);/算出黑子右斜方向的棋型数值public int heiyouxie(int hang,int lie,int num)int k = 0;/记录空白处的个数int count = 1;/记录可以形成几连int n = hang+1;/对应棋盘的行int m = lie+1;/对应棋盘的列boolean top = false;/判断上边是否有黑子boolean liveLeft = false;boolean liveRight = false;while(qipann-1m-1!=-1)&(qipann-1m-1=num|qipann-1m-1=0)if(qipann-1m-1=0&k1)/第一个空白if(qipann-2m-2!=num)liveLeft = true;break;k+;n-;m-;else if(qipann-1m-1=num)/黑子top = true;n-;m-;else/第二个空白liveLeft = true;break;if(!top)k = 0;n = hang+1;m = lie+1;while(qipann+1m+1!=-1)&(qipann+1m+1=num|qipann+1m+1=0)int t = qipann+1m+1;if(n=hang&m=lie)count+;n+;m+;continue;if(t=0&k0)/第二个空白liveRight = true;break;else/黑子n+;m+;count+;return jieguo(liveLeft,liveRight,count,k,num);public int jieguo(boolean left,boolean right,int count,int k,int num)if(count=1)return 0;else if(count=2)if(left&right)if(k=0)if(num=2)return 60;elsereturn 50;elseif(num=2)return 40;elsereturn 35;else if(!left&!right)return 0;elsereturn 10;else if(count=3)if(left&right)if(k=0)if(num=2)return 950;elsereturn 700;elseif(num=2)return 900;elsereturn 650;else if(!left&!right)return 0;elsereturn 100;else if(count=4)if(left&right)if(k=0)if(num=2)return 6000;elsereturn 3500;elseif(num=2)return 5000;elsereturn 30
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年咸阳市武功县保安员招聘考试题库附答案解析
- 礼县第一人民医院2021上半年(卫生类)人员招聘试题及解析
- 住房租赁从业人员考试题及答案
- 银行客户经理swot分析案例范文
- 施工员专业管理实务
- 酒店布草洗涤项目环境影响报告表
- 小店区2025年汽车以旧换新补贴活动方案
- 巴中经济开发区商业写字楼建设项目环境影响报告表
- 2021-2022年高校教师资格证之高等教育法规考试题库
- 2025年初级会计职称考试考点归纳试题及答案
- 2025年中国休闲小食行业市场运行态势及投资战略规划报告
- 小班健康活动:小松鼠运果子
- 土方开挖的重点和难点及保证措施
- 以叙事学为翼:高中小说教学赋能记叙文写作新探
- 早期肺癌的手术治疗讲课件
- 呼吸内镜高频电刀技术规范
- 业财融合与价值创造-洞察及研究
- 冷库清洁消毒管理制度
- 62个重大事故隐患判定标准汇编(2025版)
- 2025-2030中国知识图谱产业行业市场现状供需分析及投资评估规划分析研究报告
- (高清版)DB13(J)∕T 282-2018 城乡公共服务设施配置和建设标准
评论
0/150
提交评论