我正在构建一个泡泡破坏者 - 有点游戏。我的代码使用两个2D数组,一个包含颜色索引(1 - 6)来表示彩色圆圈,另一个指示是否已选择圆(1或0)。我可以成功选择一个圆圈,第二个数组中的正确值会发生变化,这会在屏幕上正确反映出来。
这是选择一个圆圈和四个相邻圆圈的方法。我传入用户在网格上选择的X和Y坐标。我将该位置设置为选中(在SelectedCircles数组中从0到1。检查任何边是否有一个具有相同颜色的圆,如果是,请将该圆更改为选中。
private void SelectSurroundingCircles(int xPosition, int yPosition)
{
SelectedCircles[yPosition, xPosition] = 1;
int colorKey = Circles[yPosition, xPosition];
int increment = 1;
for (int i = 0; i < Nickles.Length; i++)
{
if (Circles[yPosition - increment, xPosition] == colorKey)
SelectedCircles[yPosition - increment, xPosition] = 1; // TOP
if (Circles[yPosition + increment, xPosition] == colorKey)
SelectedCircles[yPosition + increment, xPosition] = 1; // BOTTOM
if (Circles[yPosition, xPosition + increment] == colorKey)
SelectedCircles[yPosition, xPosition + increment] = 1; // RIGHT
if (Circles[yPosition, xPosition - increment] == colorKey)
SelectedCircles[yPosition, xPosition - increment] = 1; // LEFT
}
}
我想要实现的是,选择彼此相邻的所有相同颜色的圆圈。基本上你首先看看上面相邻的圆圈,看看它们相邻的圆圈,等等...我尝试了各种其他的东西,但不知怎的,我无法弄明白。希望有人可以帮助我,我必须忽视一些事情。
感谢。
答案 0 :(得分:1)
不确定这是否满足您的确切选择逻辑,但不是递归解决方案:
if ( SelectedCircles[yPosition - increment, xPosition] != 1 && Circles[yPosition - increment, xPosition] == colorKey) {
SelectSurroundingCircles(xPosition, yPosition - increment)
}
//... same for other 3 directions
额外检查是否已经选择了位置对于防止无休止的递归非常重要
答案 1 :(得分:0)
没关系,我自己解决了。我查看了所选圈子的数组,这很有效。
for (int y = 0; y < SelectedCircles.GetLength(0); y++)
{
for (int x = 0; x < SelectedCircles.GetLength(1); x++)
{
if (SelectedCircles[y, x] == 1)
{
if (y - 1 >= 0 && SelectedCircles[y - 1, x] != 1 && Circles[y - 1, x] == colorKey)
SelectedCircles[y - 1, x] = 1; // TOP
if (y + 1 <= 9 && SelectedCircles[y + 1, x] != 1 && Circles[y + 1, x] == colorKey)
SelectedCircles[y + 1, x] = 1; // BOTTOM
if (x + 1 <= 9 && SelectedCircles[y, x + 1] != 1 && Circles[y, x + 1] == colorKey)
SelectedCircles[y, x + 1] = 1; // RIGHT
if (x - 1 >= 0 && SelectedCircles[y, x - 1] != 1 && Circles[y, x - 1] == colorKey)
SelectedCircles[y, x - 1] = 1; // LEFT
}
}
}
}