Unity 五子棋游戏设计和简单AI(2)
上文我们实现了基本五子棋的下棋的基本功能,这次我们来判断五子棋的胜负条件。逻辑是这样的:每次下棋后之后对这个棋子进行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)相关推荐
- Unity五子棋游戏设计 和简单AI实现(1)
1 准备工作: vs unity ,棋子,一张15*15的棋局. 我们先把准备好的图直接拖上来,将左下方的点设为(0,0),因此将中心点设为(7,7),由于图中的中心和图片pivot不完全吻合,所以 ...
- 五子棋游戏Java代码简单实现(含活动图和类图设计)
五子棋游戏Java代码简单实现(含活动图和类图设计) 文章目录 五子棋游戏Java代码简单实现(含活动图和类图设计) 活动图设计 类图设计 代码实现 总结 OOA和OOD设计 代码设计 可改进部分 活 ...
- C++毕业设计——基于C+++EasyX+剪枝算法的能人机对弈的五子棋游戏设计与实现(毕业论文+程序源码)——五子棋游戏
基于C+++EasyX+剪枝算法的能人机对弈的五子棋游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于C+++EasyX+剪枝算法的能人机对弈的五子棋游戏设计与实现,文章末尾附有本毕业设 ...
- android五子棋设计模板,基于android的五子棋游戏设计
内容介绍 原文档由会员 hfnmb 发布 基于Android的五子棋游戏设计 软件工程 [摘 要]本论文主要阐述以面向对象的程序开发语言eclipse为开发工具, 基于智能手机Android之上设计一 ...
- 基于STM32F407的五子棋游戏设计
本博客为资源:基于STM32F407的五子棋游戏设计内的说明文档. 目录 一.设计目标 三.设计方案 1.游戏模式 2.游戏过程 3.游戏设计 四.硬件配置 1.TFT-LCD液晶屏模块 (1)工作原 ...
- iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计
iOS简易蓝牙对战五子棋游戏设计思路之一--核心蓝牙通讯类的设计 一.引言 本系列博客将系统的介绍一款蓝牙对战五子棋的开发思路与过程,其中的核心部分有两个,一部分是蓝牙通讯中对战双方信息交互框架的设计 ...
- 五子棋游戏设计VHDL语言
本设计实现五子棋游戏设计,使用VHDL语言 quartusII 或者 vivado均可 通过VGA显示实时的棋盘,双方可以通过按键来控制黑棋和白棋的位置,实现五子棋游戏的功能. 开始和胜利的界面如下: ...
- iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法
2019独角兽企业重金招聘Python工程师标准>>> iOS简易蓝牙对战五子棋游戏设计思路之二--核心棋盘逻辑与胜负判定算法 一.引言 上一篇博客我们介绍了在开发一款蓝牙对战五子棋 ...
- 基于C语言的五子棋游戏设计与实现 课程报告+项目源码及可执行exe文件
资源下载地址:https://download.csdn.net/download/sheziqiong/85680476 资源下载地址:https://download.csdn.net/downl ...
最新文章
- java发送苹果消息慢_Spring-boot JMS 发送消息慢的解决方法
- limit_choices_to a value on a field in the same model - Google Groups
- Kafka深度解析(如何在producer中指定partition)(转)
- 在HTML中将垂直转换为平行,大物实验答案
- matlab中的cellstr的用法,matlab中的cell array, cellstr()和char()的用法
- 【WXS数据类型】Array
- 线性结构 —— 前缀和
- C++_类和对象_对象特性_类对象做为类的成员---C++语言工作笔记046
- 深度学习需要掌握的 13 个概率分布
- Java-多线程第二篇多线程相关认识(2)
- Matlab SVPWM仿真模型
- 使用idea导出数据库脚本
- dedecms如何制作中英文切换的网站?
- 编程及C/C++初学者FAQ
- 【测试】11月11日的测试
- RocketMQ独孤九剑-总纲
- intel英特尔架构
- RPM软件包和YUM软件仓库的实例
- Linux解决ip ping不通百度的问题
- ModuleNotFoundError: No module named ‘xxx‘; ‘xxx‘ is not a package解决
热门文章
- 手把手教会全局透明壁纸,Android2.3以下操作系统适用
- Spring Boot Vue Element入门实战(完结)
- 【数据结构】图的基础定义
- Google Dapper学习
- 【数据分析与可视化】DataFrame的Selecting和indexing
- ByteBuffer的Put和Get的用法和要注意的细节
- 渐变生成器及颜色取值方式
- 计算机网络末端的RTT,RTT(渲染到纹理)_百度百科
- 分子谱线数据绘图——matab
- 第9章第22节:完成产品服务幻灯片的制作 [PowerPoint精美幻灯片实战教程]