当前位置:网站首页>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
边栏推荐
猜你喜欢
随机推荐
正则表达式-判断字符串是否匹配“AABB”模式
文本字符串长度排序 - 在线工具
著名数字藏品专家、数藏大会创始人高泽龙接受中国企业家杂志采访
获取开发版安全码SHA1时遇到的报错
记一个 nest.js 路由匹配后面所有路径问题
声母-字母查询工具-词语缩写查询在线工具
Xray - powerful vulnerability scanning tools
qt send mail program
一天学习一家上市公司:索菲亚
deploy发布的jar包中文乱码
The request was rejected because the URL contained a potentially malicious String “//“
JVM:(七)运行时数据区之堆
进程和计划任务管理
磁性核壳四氧化三铁颗粒负载金纳米星|磁性Fe3O4-POSS-COOH|超顺磁四氧化三铁聚多巴胺核壳结构纳米粒子
S7-200SMART PLC Modbus TCP communication
pytorch实现GAN入门案例
2022-08-08 第四小组 修身课 学习笔记(every day)
MYSQLg高级------批量插入百万级数据量
p67 mixin 混入/混合:两个组件共享一个配置
qt发送邮件程序

![[GO]、数组与切片](/img/71/86126c41d0f43aa8b9f232b219f5d7.png)







