我想要突出显示在六边形瓷砖系统中的单位范围内的瓷砖。例如,如果我在6 | 5上放置范围= 2的单位,我想要突出显示5 | 4,6 | 4,7 | 4,7 | 5,6 | 6,5 | 5,4 | 5,4 | 4,5 | 3等......
如何从原点坐标和范围计算这些坐标?目前我使用了许多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
{
[...]
}
}
}
但随着范围的增加,复杂性也会增加......必须有更好的方法。有什么想法吗?
答案 0 :(得分:1)
递归。与照亮你可以通过移动到达哪个咒语一样。
答案 1 :(得分:0)
感谢MartinB,我尝试了递归方法,它就像一个魅力。 :)
do_parse!