当前位置:网站首页>Unity 五子棋游戏设计和简单AI(2)
Unity 五子棋游戏设计和简单AI(2)
2022-08-09 05:56:00 【makise2333】
上文我们实现了基本五子棋的下棋的基本功能,这次我们来判断五子棋的胜负条件。逻辑是这样的:每次下棋后之后对这个棋子进行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
边栏推荐
猜你喜欢
JVM:(六)运行时数据区之本地方法栈
Spark源码-任务提交流程-8-DAGScheduler任务切分
bean的生命周期
[email protected]@BSABiS纳米颗粒)|树状大分子稳定的硫化铋纳米颗粒|科研试剂"/>
四氧化三铁/硫化铋纳米复合材料([email protected]@BSABiS纳米颗粒)|树状大分子稳定的硫化铋纳米颗粒|科研试剂
Getting Started with MATLAB Image Processing
Getting started with kubernetes apparmor
cglib获取不到接口注解
shell函数、数组
Harbor Enterprise Mirror Warehouse Construction
harbor企业级镜像仓库搭建
随机推荐
华为鲲鹏生态培训试题
51串口通信(上)
JVM:(七)运行时数据区之堆
Superparamagnetic iron [email protected]@cadmium sulfide nanocore-shell structure material|Fe3O4 magnetic nanop
文件的随意读写
How to pass a two-dimensional array to a function in C language?
[Deep Learning] Let's talk about what is convolutional neural network and what does convolution mean?
2022牛客多校联赛第七场 题解
A day to learn a public company: Sophia
The difference between LDO and DC-DC
SiO2-NH2/Fe3O4表面氨基化的Fe3O4/SiO2复合磁性纳米粒子(齐岳试剂)
2022/08/08 学习笔记 (day25)File类
sqlserver导入数据类型问题
JDBC_PreparedStatement预编译对象
【零基础玩转BLDC系列】无刷直流电机闭环控制与软件架构
Three Musketeers Advanced
Fe3O4/SiO2 Composite Magnetic Nanoparticles Aminated on SiO2-NH2/Fe3O4 Surface (Qiyue Reagent)
shell函数
phpstudy 安装 flarum论坛
Getting started with kubernetes apparmor