前言

最近在做一个五子棋游戏,发现其中的五子相连判断算法非常的好,所以总结出来给大家。

算法思路

我们大家都玩过五子棋,棋子在4方向直线上有五个子,那么就表示玩家得胜。4方向分别是横向,纵向,斜向上和斜向下。

如果棋手每下一步棋,我们遍历已经下的棋子,判断其4个方向是否够5个棋子,那么这样的效率是不高的。因为我们在下棋之前,那么我们可以知道,棋盘上一定没有5子相连,所以我们就不用去判断已经下的所有棋子,而是直接判断刚下的棋子4个方向的的情况。相对于判断所有棋子,我们这个方法更简单。
因为相邻棋子相差1个长度单位,所以:

  • 棋子横向 X轴 每次变化1,Y 轴不变;
  • 棋子纵向 X轴 不变,Y 轴每次变化1;
  • 棋子斜向上 X轴 每次变化1,Y 每次变化1;
  • 棋子斜向下 X轴 每次变化1,Y 每次变化1;
    以上4个方向,是x轴的正向,那么他们的反向也要同时计算。如果计算下一个步骤不是本棋手的棋子,那么本次方向的查询结束,接着查询反方向的棋子,如果总共的相邻棋子数大于等于5,那么棋手胜利,比赛结束。

代码

bool OXGame::is5inRow(int x, int y)
{// const int DX[4] = { 1, 0, 1, 1 };// const int DY[4] = { 0, 1, 1, -1 };//DX[0] DY[0] 表示X 轴正向检查是否在一行//DX[1] DY[1] 表示Y 轴正向检查是否在一行//DX[2] DY[2] 表示右上 轴正向检查是否在一行//DX[3] DY[3] 表示右下 轴正向检查是否在一行OXPiece a = _cell[x][y];int k, c1, c2, xx, yy;for (k = 0; k < 4; k++) {c1 = c2 = 0;// 如果当前棋子类型与本方向上的棋子是同一类则,继续判断// 正方向逐个比较for (xx = x + DX[k], yy = y + DY[k]; cell(xx, yy) == a; xx += DX[k], yy += DY[k]) {c1++;}// 相反方向逐个比较for (xx = x - DX[k], yy = y - DY[k]; cell(xx, yy) == a; xx -= DX[k], yy -= DY[k]) {c2++;}if (c1 + c2 >= 4) {  // 不包含当前,已经有4个连续的,直接判胜利,保存胜利数据// 将胜利的棋子保存到数组中xx = x - c2 * DX[k];//将起始位置定位到最末端yy = y - c2 * DY[k];for (int i = 0; i < 5; i++) {//逐个添加_winPoint[i] = OXPoint(xx, yy);xx += DX[k];yy += DY[k];}return true;}}return false;
}

可以下载本人开发的五子棋游戏,下载试玩一下。
如果您觉得本文对你有帮助,欢迎打赏。

五子棋---五子相连判断相关推荐

  1. 关于五子棋五子连珠判定问题

    五子棋判断哪一方胜利 引入 五子棋大家都知道吧,不再写多余的描述,本文只介绍一个自己想出来的判断双方哪一方胜利的算法. 注意:本文算法均为本人自创,没有借鉴任何人的文章与帮助,如有雷同,纯属巧合!未经 ...

  2. c语言五子棋怎么判断五子连珠,五子棋 输赢判断算法

    我们以一个二位数组表示五子棋,通过x.y坐标,表示一个棋子的位置. 1.基本原理: 五子棋判断输赢,其实就是一个二维坐标上,判断上下.左右.两个45度直线,是否有五个相同的直连棋子. 2.判断时机: ...

  3. NowCoder最近爱上了五子棋,现在给你一个棋局,请你帮忙判断其中有没有五子连珠(超过五颗也算)。

    NowCoder最近爱上了五子棋,现在给你一个棋局,请你帮忙判断其中有没有五子连珠(超过五颗也算). 解析: import java.util.*; public class Main {static ...

  4. c语言五子棋怎么判断五子连珠,分享一个 五子棋 输赢 的 判断逻辑。C#脚本

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 欢迎指出哪里需要改进.头有点晕,想了半天 实现的. 首先棋盘是由二维数组qipan[,]实现. 然后0是没有下子的状态.1是白子,2是黑子. 直接每次下完 ...

  5. 五子棋游戏-3(判断五子连心)

    最后是判断五子连心,将以下思路:从落子点开始检测4个方向 1.左右方向相同颜色的子是否达到5个 2.上下方向相同颜色的子是否达到5个 3.左斜方向相同颜色的子是否达到5个 4.右斜方向相同颜色的子是否 ...

  6. 五子棋判断 五子连珠

    题目链接:https://ac.nowcoder.com/acm/contest/331/B 题目大意: 思路:因为N太大.二维数组肯定是开不下.所以用map存就可以了. 当时就去写了二百多行的代码, ...

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

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

  8. java 连珠五子棋.现代职业_用Java写的简单五子棋游戏(原创五子连珠算法)

    源码jar包(已安装jdk环境可直接运行) 五子连珠算法为自创算法,对于五子棋该算法性能足以. 该算法原理是这样的: 根据当前下子位置获取该位置上的4条直线8个方向的与当前棋子同色的棋子连珠数量,如果 ...

  9. [从零开始unity3D]“五子连珠”游戏实现,网格数组的创建(1)

    大概是一周前,在知乎上偶然看见一位前辈提供的意见,他认为在一个立志于进入游戏行业发展的程序员在大学期间应该多动手,亲自去完成一些项目,在遇到坑,填补坑的过程中快速的提升技术水平.想来我虽然已经入职游戏 ...

最新文章

  1. JavaScript初学者应注意的七个细节
  2. python新增练习(二)
  3. 深度学习100例-卷积神经网络(CNN)3D医疗影像识别 | 第23天
  4. python3 缺少PIP解决办法
  5. ECCV 2020 论文大盘点-遥感与航空影像处理识别篇
  6. Oracle取同一类别中某属性最大或者最小值的一条
  7. Linux配置文件字体颜色
  8. (8). 使用JPA保存数据【从零开始学Spring Boot】
  9. [Aaronyang] 写给自己的WPF4.5 笔记10[层次数据需求处理,TreeView绿色文章1/4]
  10. mysql 清空二进制日志
  11. BootStrap 模态框禁用空白处点击关闭,手动显示隐藏,垂直居中
  12. 计算机桌面设置上时间表,如何在电脑桌面设置显示星期
  13. 学英语《每日一歌》之brave
  14. python开发板卡驱动开发_树莓派开发板如何驱动LED灯
  15. C语言和JAVA的关联
  16. java小游戏------Flappy Bird(飞翔的小鸟含源码)
  17. mysql 本日、本周、本月、本年 统计
  18. 求一份很早的MUD文字游戏,海洋2或者海洋3的代码
  19. EmailAll 强大的邮箱收集工具(企业邮箱收集)
  20. 【讲座笔记】商业分析全攻略手册

热门文章

  1. 插件化实现原理(学习笔记六)
  2. (整理)学习NLP的资源
  3. 金蝶云星空和金蝶云星空接口打通对接实战
  4. Python通过蓝牙获取米家温湿度计2的数据
  5. 用户画像标签数据开发之用户特征库开发
  6. JAVA替换PDF文字
  7. pat程序题java L1-047. 装睡
  8. 计算机组成原理知识框架梳理
  9. Linux命令-按照与使用 (3) centOS7 通过nmtui和nmcli图形配置网络服务
  10. Codeforces Round #191 (Div.2) 题解