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





《五子棋人机对战代码(共9页).doc》由会员分享,可在线阅读,更多相关《五子棋人机对战代码(共9页).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上8.2 电脑下棋算法设计本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是:利用分数代表每个位置的重要程度,越重要的位置的分数值会越高,当电脑下棋时会先将电脑和玩家棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高,那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。 具体的分数值赋值如下:分数电脑玩家活二6050半活二4035死二1010半死二1010活三950700半活三900650死三100100半死三100100活四60003500半活四50003000死四4000800半死四3600750活五20000
2、15000半活五100003300死五2000015000半死五100003300解释一下其中的活,半活,死,半死:活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。死:代表几个子是相连的,中间没有空格,但有一端紧挨着对方的棋子或有一端正好在棋盘的边界。半死:代表几个子不是相连的,几个子中间有一个空格,而且一端紧挨着对方的棋子或有一端正好在棋盘的边界。每个位置的分数的计算方式是各个方向的分数相加,最后找出电脑棋型和玩家棋型的分数的最高的位置为电脑的下棋点下棋。具体的代码如下:public void qixing(
3、)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
4、,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)liveLe
5、ft = 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,liveRigh
6、t,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&
7、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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 人机 代码

限制150内