C# 如何计算网格上三个不同的坐标是否彼此相邻?

C# 如何计算网格上三个不同的坐标是否彼此相邻?,c#,unity3d,coordinates,C#,Unity3d,Coordinates,我用C#制作了一个链接器游戏,玩家有一个由不同颜色的单元格组成的网格,并垂直、水平或对角链接相同颜色的单元格。目前,我使用的是5x5网格。左下角坐标为(0,0),右上角坐标为(4,4) 我试图检测一个死锁的电路板,所以当没有至少三个同一颜色的单元可链接时,我真的很难实现逻辑 我得到一个特定颜色的所有单元格的列表,我想写一个函数来检查这些单元格的坐标,看看三个单元格是否相邻 例如,假设我的主板上有以下蓝色单元格(圆圈为蓝色): 我从左到右,从下到上扫描电路板,我传入: 0,0 3,0 4,0 0,

我用C#制作了一个链接器游戏,玩家有一个由不同颜色的单元格组成的网格,并垂直、水平或对角链接相同颜色的单元格。目前,我使用的是5x5网格。左下角坐标为(0,0),右上角坐标为(4,4)

我试图检测一个死锁的电路板,所以当没有至少三个同一颜色的单元可链接时,我真的很难实现逻辑

我得到一个特定颜色的所有单元格的列表,我想写一个函数来检查这些单元格的坐标,看看三个单元格是否相邻

例如,假设我的主板上有以下蓝色单元格(圆圈为蓝色):

我从左到右,从下到上扫描电路板,我传入:

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)