【问题标题】:How can I calculate if three different coordinates are adjacent to each other on a grid?如何计算三个不同的坐标在网格上是否彼此相邻?
【发布时间】:2020-08-17 01:12:37
【问题描述】:

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

我正在尝试检测死锁的电路板,因此当一种颜色的至少三个单元格可链接时,但我真的很难实现逻辑。

我正在获取某种颜色的所有单元格的列表,我想编写一个函数来检查这些单元格的坐标,看看三个单元格是否彼此相邻。

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

x x x x x
x x x o o
x x x o x
o x x x x
o x x o o

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

0,0
3,0
4,0
0,1
3,2
3,3
4,3

由此,我知道 (3,2) 可以连接到 (3,3),因为它在它上面。然后我知道 (3,3) 可以连接到 (4,3) 的右侧。

有没有人知道如何编写一个函数来遍历这些坐标并检查相邻的坐标?如果它们三个是可连接的,则返回true或false?

谢谢!

【问题讨论】:

    标签: c# unity3d coordinates


    【解决方案1】:

    我会创建一个连接图块组的列表。实现这一点的方法之一是使用递归函数。

    一点伪代码:

    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 变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      相关资源
      最近更新 更多