在坐标系中获取相邻六边形瓷砖的坐标

时间:2017-09-01 20:59:33

标签: c# monogame hexagonal-tiles

我想要突出显示在六边形瓷砖系统中的单位范围内的瓷砖。例如,如果我在6 | 5上放置范围= 2的单位,我想要突出显示5 | 4,6 | 4,7 | 4,7 | 5,6 | 6,5 | 5,4 | 5,4 | 4,5 | 3等......

example map

如何从原点坐标和范围计算这些坐标?目前我使用了许多if子句来检查这样的可能性:

if (gameField[x, y].IsHighlighted && gameField[x, y].DeployedUnit != null)
{
    if (gameField[x, y].DeployedUnit.AttackRange > 0)
    {
        if (x % 2 == 0)
        {
            if (x > 0 && y > 0)
                 {
                      gameField[x - 1, y - 1].IsGreenRange = true;
                 }
                 if (x > 0)
                 {
                      gameField[x - 1, y].IsGreenRange = true;
                 }
                 if (y < height - 1)
                 {
                      gameField[x, y + 1].IsGreenRange = true;
                 }
                 if (x < length - 1)
                 {
                      gameField[x + 1, y].IsGreenRange = true;
                 }
                 if (x < length - 1 && y > 0)
                 {
                      gameField[x + 1, y - 1].IsGreenRange = true;
                 }
                 if (y > 0)
                 {
                      gameField[x, y - 1].IsGreenRange = true;
                 }
        }
        else
        {
                 [...]
        }
    }
}

但随着范围的增加,复杂性也会增加......必须有更好的方法。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

递归。与照亮你可以通过移动到达哪个咒语一样。

答案 1 :(得分:0)

感谢MartinB,我尝试了递归方法,它就像一个魅力。 :)

do_parse!