欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    五子棋人机对战代码(共9页).doc

    • 资源ID:13318183       资源大小:52.50KB        全文页数:9页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    五子棋人机对战代码(共9页).doc

    精选优质文档-倾情为你奉上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;i<17;i+)for(int j=0;j<17;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&&k<1)/第一个空白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&&k<1)/第一个空白if(qipannm+2!=num)liveRight = true;break;k+;m+;else if(t=0&&k>0)/第二个空白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&&k<1)/第一个空白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&&k<1)/第一个空白if(qipann+2m!=num)liveRight = true;break;k+;n+;else if(t=0&&k>0)/第二个空白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&&k<1)/第一个空白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&&k<1)/第一个空白if(qipann-2m+2!=num)liveRight = true;break;k+;n-;m+;else if(t=0&&k>0)/第二个空白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&&k<1)/第一个空白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&&k<1)/第一个空白if(qipann+2m+2!=num)liveRight = true;break;k+;n+;m+;else if(t=0&&k>0)/第二个空白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 3000;else if(!left&&!right)return 0;elseif(k=0)if(num=2)return 4000;elsereturn 800;elseif(num=2)return 3600;elsereturn 750;elseif(k=0)if(num=2)return 20000;elsereturn 15000;elseif(num=2)return 10000;elsereturn 3300;专心-专注-专业

    注意事项

    本文(五子棋人机对战代码(共9页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开