#开始

  最近在忙着做一个基于酷Q的QQ机器人,想到了做游戏,第一个想到的霸气点的游戏就是五子棋啊  ` _>`

  因为没有图形界面的原因 所有核心就是判断是否在棋盘上出现了五个棋子连在一起的情况 然后我想到了三种搜索方式 在这里展示出来

#效果

#判断五子代码

  

     public static int dudgeWin(int[][] qipan,int y,int x) //判断是否五个棋子连在一起了 如果0是黑棋赢了 -1是白棋赢了
{
int c = 0; //计数
int qi = qipan[y][x];
//上下
for(int i= 0 ;i<11;i++) //在所在的列中暴力搜索
{
if(qi == qipan[i][x])
{
c++; //遇到相同的棋子就加一
if(c>=5)
{
return qi;
}
}else
{
c = 0; //如果出现一个不同的 那就归一
}
} c = 0; //下面开始左右搜索
for(int i= 0 ;i<11;i++) //在所在的行中暴力搜索
{
if(qi == qipan[y][i])
{
c++; //遇到相同的棋子就加一
if(c>=5)
{
return qi;
}
}else
{
c = 0; //如果出现一个不同的 那就归一
}
} c = 0; // 平行于主对角线
if(x>y) //主对角线上
{
for(int i=0,j=x-y;i<11 && j<11;i++,j++)
{
if(qipan[i][j] == qi)
{
c++;
if(c >= 5)
{
return qi;
}
}else
{
c = 0;
}
}
}else if(x<y) //主对角线下
{
for(int i=y-x,j=0;i<11 && j<11;i++,j++)
{
if(qipan[i][j] == qi)
{
c++;
if(c >= 5)
{
return qi;
}
}else
{
c = 0;
}
}
}else //在主对角线上
{
for(int i=0,j=0;i<11 && j<11;i++,j++)
{
if(qipan[i][j] == qi)
{
c++;
if(c >= 5)
{
return qi;
}
}else
{
c = 0;
}
}
} c = 0; //平行于副对角线的搜索
for(int i=y,j=x;i>=0 && j<11;i--,j++)
{
if(qipan[i-1][j+1] == qi)
{
c++;
if(c >= 5)
{
return qi;
}
}else
{
break;
}
} for(int i=y,j=x;i<11 && j>=0;i++,j--)
{
if(qipan[i][j] == qi)
{
c++;
if(c >= 5)
{
return qi;
}
}else
{
break;
}
}
return -2; //没有胜利 那就是返回-2
}

  1. 水平和垂直方向都是搜索整列的方式 定义了个int c; 用来计数.

  2. 其实平行于对角线方向的判断也和水平方向差不多 只不过是倾斜的判断 依旧是搜索一整排 所以应该算作一种方法

  3. 平行于副对角线方向的这个搜索方法应该是效率最高的了吧 以副对角线为例  先依次判断右上角方向上的棋子 出现空位或者与当前下载的棋子的类型不一样的,那就结束判断,开始判断左下角方向上的棋子 遇到空位或者不同类型的棋子就退出计数

#备注

  1. 上面的代码仅仅提供思路 切记不要直接复制到自己的代码中 因为不一定合适

  2. 对完整的QQ机器人源码感兴趣的同学可以到这里查看源码: https://github.com/LonelySinging/new_QQRobot.git

  3. 上面的代码还不支持人机模式

  4. 有宝贵的建议请留言 谢谢

Java 判断五子棋五子相连的更多相关文章

  1. [Java]局域网五子棋

    提示: 下面给的代码有问题哦,可以自己去调试 可用版下载 请点击这里 密码:x6ve(退出程序,端口并没有被关闭,可自行修改代码实现) img

  2. 用Java写的简单五子棋游戏(原创五子连珠算法)

    源码jar包(已安装jdk环境可直接运行) 下载地址:http://download.csdn.net/detail/eguid_1/9532912 五子连珠算法为自创算法,对于五子棋该算法性能足以. ...

  3. Java的五子棋实现

    Java 五子棋 注:除机器人算法外其余借鉴于MLDN. package MyFiveChess; import robot.*; import java.awt.*; import javax.sw ...

  4. Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...

  5. HTML5+JS 《五子飞》游戏实现(一)规则

    很久没写文章了,这个游戏其实已经写了有段时间了,一直没有完善,赶在新年之际,分享给大家. 该<五子飞>游戏,不是平常大家所说的<五子棋>,这个玩法简单,是我们老家儿时常玩的一种 ...

  6. HTML5+JS 《五子飞》游戏实现(八)人机对战

    要想实现人机对战,就必须让电脑自动下棋,而且要知道自动去查找对方的棋子,看看有没有可以挑一对的,有没有可以夹一个的,这样下起来才有意思. 当电脑用户下完棋后,电脑应立即搜索用户的棋子,然后如果没有被吃 ...

  7. HTML5+JS 《五子飞》游戏实现(六)鼠标响应与多重选择

    上一章我们提到了如果有多条线上的棋子可以被吃掉,那么游戏需要提示用户,让用户选择吃哪条线上的.另外因为是网页游戏,所以一定要实现鼠标单击棋子可以进行操作. 当鼠标移动棋子上面后,切换鼠标指针为手形,移 ...

  8. HTML5+JS 《五子飞》游戏实现(五)移动棋子

    上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子.现在里沃特跟大家分享分享,怎么移动棋子. 想要移动棋子,在页面上,首先要点击一下要移动的棋子,然后再点击一下目标位 ...

  9. HTML5+JS 《五子飞》游戏实现(四)夹一个和挑一对

    在第一章我们已经说了怎么才能“夹一个”以及怎样才能挑一对,但那毕竟只是书面上的,对码农来讲,我们还是用代码讲解起来会更容易了解. 为了更容易对照分析,我们先把路线再次贴出来: // 可走的路线 thi ...

随机推荐

  1. Python 实现深度学习

    前言 最近由于疫情被困在家,于是准备每天看点专业知识,准备写成博客,不定期发布. 博客大概会写5~7篇,主要是"解剖"一些深度学习的底层技术.关于深度学习,计算机专业的人多少都会了 ...

  2. WPF页面切换

    XAML <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft. ...

  3. pycharm连接mysql5.7

    由于加密方式改变 需要在url后增加 ?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

  4. spring(三):BeanDefiniton

  5. [lua]紫猫lua教程-命令宝典-L1-03-01. 闭包

    L1[闭包]01. 函数的传递赋值 没什么说的 1.函数作为变量来看 可以轻松的声明 相互赋值 2.函数变量本质是 一个内存指针 所以函数变量的相互赋值不是传递的函数本身 而是指向这个函数的内存地址 ...

  6. 19年SD夏令营游记

    首先,因为自己的刻苦学习(tui),所以游记很短,勿喷... 7.22.2019——报到 话说昨晚热到12点才睡着,在路上大家一直都在玩游戏,没有游戏可玩的我听着歌发呆... 到了山东省外国语职业技术 ...

  7. Python偶斐波那契数

    斐波那契数列中的每一项都是前两项的和.由1和2开始生成的斐波那契数列前10项为 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … 考虑该斐波那契数列中不超过四百万的项,求其中为 ...

  8. C#中使用IndexOf()判断字符串在字符串数组中第一次出现的索引位置

    ] {"}; "; //判断字符串的前几位在另一个字符串数组中第一次出现的索引位置 index = Array.IndexOf(s, s1.Substring(, ));

  9. SQL Server 用户定义表类型

    用户定义表类型: CREATE TYPE [dbo].[TVP_Location] AS TABLE( [Location] [varchar](50) NOT NULL, [Address] [va ...

  10. 多种语言输出helloworld