C# 如何计算网格上三个不同的坐标是否彼此相邻?
我用C#制作了一个链接器游戏,玩家有一个由不同颜色的单元格组成的网格,并垂直、水平或对角链接相同颜色的单元格。目前,我使用的是5x5网格。左下角坐标为(0,0),右上角坐标为(4,4) 我试图检测一个死锁的电路板,所以当没有至少三个同一颜色的单元可链接时,我真的很难实现逻辑 我得到一个特定颜色的所有单元格的列表,我想写一个函数来检查这些单元格的坐标,看看三个单元格是否相邻 例如,假设我的主板上有以下蓝色单元格(圆圈为蓝色): 我从左到右,从下到上扫描电路板,我传入:C# 如何计算网格上三个不同的坐标是否彼此相邻?,c#,unity3d,coordinates,C#,Unity3d,Coordinates,我用C#制作了一个链接器游戏,玩家有一个由不同颜色的单元格组成的网格,并垂直、水平或对角链接相同颜色的单元格。目前,我使用的是5x5网格。左下角坐标为(0,0),右上角坐标为(4,4) 我试图检测一个死锁的电路板,所以当没有至少三个同一颜色的单元可链接时,我真的很难实现逻辑 我得到一个特定颜色的所有单元格的列表,我想写一个函数来检查这些单元格的坐标,看看三个单元格是否相邻 例如,假设我的主板上有以下蓝色单元格(圆圈为蓝色): 我从左到右,从下到上扫描电路板,我传入: 0,0 3,0 4,0 0,
0,0
3,0
4,0
0,1
3,2
3,3
4,3
由此,我知道(3,2)可以连接到(3,3),因为它位于(3,3)之上。然后我知道(3,3)可以连接到(4,3),因为它在它的右边
有人知道我如何编写一个函数来迭代这些坐标并检查相邻的坐标吗?如果其中三个是可连接的,则返回true或false
谢谢 我将创建一个连接瓷砖组的列表。实现这一点的方法之一是使用递归函数 一点伪代码:
void function addAdjacentTiles(List knownTiles, Tile currentTile):
append currentTile to knownTiles
for each tile adjacent to currentTile:
if adjacentTile is the same colour and is not in knownTiles:
addAdjacentTiles(adjacentTile) // This is the recursive part
listOfGroups = empty list
for each tile:
if (tile is not in listOfGroups):
tileGroup = empty list
addAdjacentTiles(tileGroup, tile)
append tileGroup to listOfGroups
longest = max(the sizes of all groups)
请注意,addAdjacentTiles函数不必返回任何内容,因为它修改了可变的knownTiles变量
void function addAdjacentTiles(List knownTiles, Tile currentTile):
append currentTile to knownTiles
for each tile adjacent to currentTile:
if adjacentTile is the same colour and is not in knownTiles:
addAdjacentTiles(adjacentTile) // This is the recursive part
listOfGroups = empty list
for each tile:
if (tile is not in listOfGroups):
tileGroup = empty list
addAdjacentTiles(tileGroup, tile)
append tileGroup to listOfGroups
longest = max(the sizes of all groups)