五子棋棋型源码
来源:互联网 发布:mac滴管粉底液色号 编辑:程序博客网 时间:2024/04/29 17:57
关于棋型判断,网上已有资料都不太简洁,决定分享下自己的方法。具体思路是这样的。对于一个空点,只有左边或者右边的4个点能与它形成连五,所以只需搜索这八个点。接下来肯定是要统计棋子数了,比如有两颗棋子,但如果左右没有足够的空格是不能形成连五的。所以要判断成五空间,搜索时遇到己方棋子或者空格,空间加一,对方棋子就停止计数。当空间大于等于5时就能成五。
在五子棋当中还有分活棋和眠棋,所以AI也必须能判断才行。先看活四,很明显活四有两个成五的空点,这时它的成五空间至少是6,同样可以活二与活三的空间也是6。所以成五空间大于5就是活棋,等于5就是眠棋。
但还有些特殊情况,比如_o_o_o_,由于棋子加上中间空点已经是五,下在外面没意义,所以接下来只能下在中间的空点,不可能在左右两边各有一个成五点,所以这也是眠棋。
所以总结起来就是成五空间要大于5,而且棋子加中间空格小于5的才是活棋,如果不是活棋,而成五空间等于五的就是眠棋。
至于是活三还是活四,只要对棋子进行计数就行。下面放代码:-)
int TypeLine(int role, int x, int y, int i, int j) {
int a, b, k;
//空格数和被阻挡次数
int kong = 0, block = 0;
//len成五空间,len2棋型长度
//count棋子数
int len = 1, len2 = 1, count = 1;
a = x;
b = y;
for (k = 0; k < 4; k++) {
//加上方向向量
a += i;
b += j;
if (!CheckXy(a, b)) {
/* len2==kong+count表示上一点
是己方棋子 */
if (len2 == kong + count) block++;
break;
}
if (chessboard[a][b] == role) {
if (kong > 2 || kong + count > 4)
break;
count++;
len++;
len2 = kong + count;
}
else if (chessboard[a][b] == 0) {
len++;
kong++;
} else {
if (len2 == kong + count)
block++;
break;
}
}
// 计算中间空格
kong = len2 - count;
a = x;
b = y;
for (k = 0; k < 4; k++) {
a -= i;
b -= j;
if (!CheckXy(a, b)) {
if (len2 == kong + count)
block++;
break;
}
if (chessboard[a][b] == role) {
if (kong > 2 || kong + count > 4)
break;
count++;
len++;
len2 = kong + count;
} else if (chessboard[a][b] == 0) {
len++;
kong++;
} else {
if (len2 == kong + count)
block++;
break;
}
}
if (len >= 5 && count > 1) {
if (count == 5) return win;
if (len > 5 && len2 < 5 && block == 0)
{
switch (count) {
case 2: return flex2;
case 3: return flex3;
case 4: return flex4;
}
} else {
switch (count) {
case 3: return block3;
case 4: return block4;
}
}
}
return 0;
}
1 0
- 五子棋棋型源码
- 五子棋源码
- 五子棋源码
- 五子棋源码
- 简单五子棋java源码
- java五子棋+源码
- AS3 五子棋源码
- 五子棋游戏源码
- android五子棋游戏源码
- MaOC五子棋源码
- Java-Swing五子棋源码
- java五子棋源码
- 五子棋java源码
- 五子棋的c语言源码
- Android五子棋游戏源码详解
- 【原创】五子棋大师2.0完整源码
- Android 实战项目之五子棋 附源码
- Android 实战项目之五子棋 附源码
- Spring Boot普通类调用bean
- 图像基本变换---快速均值模糊算法
- ViewPagerIndicator
- 图像基本变换---图像伪色彩
- SlidingMenu 点击其中一个的时候,就自动的选择栏消失
- 五子棋棋型源码
- 侧滑和主界面的Fragment搭建
- 关于 Mysql innodb的索引
- 图像基本变换---图像快速高斯模糊算法
- axes对象的句柄会消失,即首次调用有效,第二次就出现
- SlidingMenu侧滑菜单
- 引导页按钮滑动,算法实现
- Linux中rar软件安装方法及使用
- ByteBuffer的allocate和allocateDirect区别