五子棋是一种java实现两人对弈五子棋的棋类游戏,规则是:在正方形棋盘中,由黑方先行,白方后行,轮流弈子,

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

棋盘正中一点为“天元”棋盘兩端的横线称端线。棋盘左右最外边的两条纵线称边线从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为“星”。

以持黑方为准棋盘上的纵轴线从左到右用英文字母A~O标记。横行线从近到远用阿拉伯数字1~15标记纵横轴上的横纵线交叉点分别用横纵線标记的名称合写成。如“天元”H8四个“星”分别为D4、D12、L12、L4等。

1五连:五颗同色棋子连在一起

2,活四:有2个成五点的四颗棋子

3冲四:有1个成五点的四颗棋子

4,活三:可以形成活四的三颗棋子

由于黑方落一子同时形成二个或二个以上黑方活三的局面

由于黑方落一子,哃时形成二个或二个以上黑方四(活四或者冲四)的局面

由于黑方落一子形成六个或者六个以上的同色连续棋子

通过dx和dy这2个常数数组,存下8个方向的向量就可以把棋型判断、禁手判断等二维问题化作一维问题

通过for循环即可遍历每个方向,使得代码变得非常简洁

2棋型判斷和禁手判断

对于任何一个落子的位置,要独立的判断形成了几个活四几个冲四,几个活三

三三禁手和四四禁手直接根据三种棋型的數量判断即可,长连禁手单独判断很简单。

为了降低计算量采取对每个落子位置单独进行打分的方法。

落子之后计算棋型活四计1000分,冲四和活三都计100分

另外,落子位置的8个邻居中只要是有落子的位置,无论是黑是白都计1分。

(对于边界上的点只有5个或者3个邻居,为了编程方便棋盘本身应该用一圈空格包围)

这样的话,对于0分的点直接忽略即可大大增加剪枝效率。

因为0分的点是绝对不下的所以禁手点直接算0分即可。

虽然规则允许下禁手点但是禁手判负,所以AI认为无论黑方不会下禁手点是合理的(无论黑方是AI还是玩家)

采取三层的极大极小算法

  sumksub off i++; off;//据网友提示这里应该是i--写代码过了很久了,懒得确认真相了 temp0//高效剪枝避开了禁手点和无效点 printf(" 轮到玩家下,请輸入坐标(输入=0查看棋谱): "); temp0//高效剪枝避开了禁手点和无效点 printf(" 轮到玩家下,请输入坐标(输入=0查看棋谱): "); 
}

我要回帖

更多关于 java实现两人对弈五子棋 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信