上文我们实现了基本五子棋的下棋的基本功能,这次我们来判断五子棋的胜负条件。逻辑是这样的:每次下棋后之后对这个棋子进行8个方向的检测,如果有相同类型的棋子则沿着棋子继续判断直到5个为止。介绍完基本思路,以下来讲讲如何实现。

1首先是检查一行的代码:设置一个偏移量为offset,两个循环分别检测每个店的正方向和负方向的棋子。当num=5时,停止游戏,宣布游戏结束。在循环中要注意设,x,y分别pos加上offset偏移量。循环条件为x,y均要小于15且大于0。每次循环加一个偏移量。(偏移量=向某一方向移动一格)

 public void CheckOneLine(int[]pos, int[] offset){int Num = 1;for (int x = pos[0] + offset[0], y = pos[1] + offset[1]; (x<15&&x>0&&y<15&&y>0); x += offset[0], y += offset[1]){if (grid[x, y] == (int)turn){Num += 1;}else break;}for (int x = pos[0] - offset[0], y = pos[1] - offset[1]; (x < 15 && x > 0 && y < 15 && y > 0); x -= offset[0], y -= offset[1]){if (grid[x, y] == (int)turn){Num += 1;}else break;}if (Num == 5){GameStart = false;Debug.Log("游戏结束");}}

2以下代码是对于一个棋子8个方向的检测,由于每次检测已经包含了正负2个方向,那么只需要检测四个方向(左,上,斜右上方,斜左上方)就可以了。

public void CheckWinner(int[] pos){CheckOneLine(pos, new int[2] { 0, 1 });CheckOneLine(pos, new int[2] { 1, 0 });CheckOneLine(pos, new int[2] { 1, 1 });CheckOneLine(pos, new int[2] { 1, -1 });}

3将checkWinner方法放到玩家下棋的方法中,注意放的位置,要等grid先被被赋值后再进行棋子的检测。

 public  void  Play(int[] pos){if (grid[pos[0], pos[1]]!=0||GameStart==false)return;if (turn == ChessType.Black) {Instantiate(prefabs[0], new Vector3(pos[0], pos[1], 0), Quaternion.identity);grid[pos[0], pos[1]] = (int)ChessType.Black;CheckWinner(pos);turn = ChessType.White;}else if (turn == ChessType.White){Instantiate(prefabs[1], new Vector3(pos[0], pos[1], 0), Quaternion.identity);grid[pos[0], pos[1]] = (int)ChessType.White;CheckWinner(pos);turn = ChessType.Black;}

4 如下图所示,这样我们就完成了基本的unity五子棋胜利判定的逻辑了。

5 悔棋的思路:我们可以再新建一个栈,保存每次下棋的位置,当每次想要悔棋的时候可以直接将上次的棋子出栈,并且销毁。代码就不在此贴出了,有兴趣的读者可以自行尝试完成悔棋的功能。

如果有别的想法也欢迎讨论交流,本文用到的东西其实不多,非常简单。在最后我会把完整工程的源代码发布出来,以供读者参考。

五子棋起源于中国,竞技项目之一,是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。

上文链接:Unity五子棋功能 和简单AI实现(1)

https://blog.csdn.net/makise2333/article/details/126069263​​​​​​​

Unity 五子棋游戏设计和简单AI(2)相关推荐

  1. Unity五子棋游戏设计 和简单AI实现(1)

     1 准备工作: vs unity ,棋子,一张15*15的棋局. 我们先把准备好的图直接拖上来,将左下方的点设为(0,0),因此将中心点设为(7,7),由于图中的中心和图片pivot不完全吻合,所以 ...

  2. 五子棋游戏Java代码简单实现(含活动图和类图设计)

    五子棋游戏Java代码简单实现(含活动图和类图设计) 文章目录 五子棋游戏Java代码简单实现(含活动图和类图设计) 活动图设计 类图设计 代码实现 总结 OOA和OOD设计 代码设计 可改进部分 活 ...

  3. C++毕业设计——基于C+++EasyX+剪枝算法的能人机对弈的五子棋游戏设计与实现(毕业论文+程序源码)——五子棋游戏

    基于C+++EasyX+剪枝算法的能人机对弈的五子棋游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于C+++EasyX+剪枝算法的能人机对弈的五子棋游戏设计与实现,文章末尾附有本毕业设 ...

  4. android五子棋设计模板,基于android的五子棋游戏设计

    内容介绍 原文档由会员 hfnmb 发布 基于Android的五子棋游戏设计 软件工程 [摘 要]本论文主要阐述以面向对象的程序开发语言eclipse为开发工具, 基于智能手机Android之上设计一 ...

  5. ​基于STM32F407的五子棋游戏设计​

    本博客为资源:基于STM32F407的五子棋游戏设计内的说明文档. 目录 一.设计目标 三.设计方案 1.游戏模式 2.游戏过程 3.游戏设计 四.硬件配置 1.TFT-LCD液晶屏模块 (1)工作原 ...

  6. iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计

    iOS简易蓝牙对战五子棋游戏设计思路之一--核心蓝牙通讯类的设计 一.引言 本系列博客将系统的介绍一款蓝牙对战五子棋的开发思路与过程,其中的核心部分有两个,一部分是蓝牙通讯中对战双方信息交互框架的设计 ...

  7. 五子棋游戏设计VHDL语言

    本设计实现五子棋游戏设计,使用VHDL语言 quartusII 或者 vivado均可 通过VGA显示实时的棋盘,双方可以通过按键来控制黑棋和白棋的位置,实现五子棋游戏的功能. 开始和胜利的界面如下: ...

  8. iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法

    2019独角兽企业重金招聘Python工程师标准>>> iOS简易蓝牙对战五子棋游戏设计思路之二--核心棋盘逻辑与胜负判定算法 一.引言 上一篇博客我们介绍了在开发一款蓝牙对战五子棋 ...

  9. 基于C语言的五子棋游戏设计与实现 课程报告+项目源码及可执行exe文件

    资源下载地址:https://download.csdn.net/download/sheziqiong/85680476 资源下载地址:https://download.csdn.net/downl ...

最新文章

  1. java发送苹果消息慢_Spring-boot JMS 发送消息慢的解决方法
  2. limit_choices_to a value on a field in the same model - Google Groups
  3. Kafka深度解析(如何在producer中指定partition)(转)
  4. 在HTML中将垂直转换为平行,大物实验答案
  5. matlab中的cellstr的用法,matlab中的cell array, cellstr()和char()的用法
  6. 【WXS数据类型】Array
  7. 线性结构 —— 前缀和
  8. C++_类和对象_对象特性_类对象做为类的成员---C++语言工作笔记046
  9. 深度学习需要掌握的 13 个概率分布
  10. Java-多线程第二篇多线程相关认识(2)
  11. Matlab SVPWM仿真模型
  12. 使用idea导出数据库脚本
  13. dedecms如何制作中英文切换的网站?
  14. 编程及C/C++初学者FAQ
  15. 【测试】11月11日的测试
  16. RocketMQ独孤九剑-总纲
  17. intel英特尔架构
  18. RPM软件包和YUM软件仓库的实例
  19. Linux解决ip ping不通百度的问题
  20. ModuleNotFoundError: No module named ‘xxx‘; ‘xxx‘ is not a package解决

热门文章

  1. 手把手教会全局透明壁纸,Android2.3以下操作系统适用
  2. Spring Boot Vue Element入门实战(完结)
  3. 【数据结构】图的基础定义
  4. Google Dapper学习
  5. 【数据分析与可视化】DataFrame的Selecting和indexing
  6. ByteBuffer的Put和Get的用法和要注意的细节
  7. 渐变生成器及颜色取值方式
  8. 计算机网络末端的RTT,RTT(渲染到纹理)_百度百科
  9. 分子谱线数据绘图——matab
  10. 第9章第22节:完成产品服务幻灯片的制作 [PowerPoint精美幻灯片实战教程]