我正在制作一款类似泡泡龙的游戏。我的代码使用两个二维数组,一个包含颜色索引 (1 - 6) 来表示彩色圆圈,另一个指示圆圈是否已被选中(1 或 0)。我可以成功地选择一个圆,第二个数组中的正确值发生变化,这在屏幕上正确反射(reflect)出来。
这是选择一个圆和四个相邻圆的方法。我传入用户在网格上选择的 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
}
}
我想要实现的是选中所有相邻的相同颜色的圆圈。基本上,您首先要查看上面相邻的圆圈,然后查看它们相邻的圆圈,依此类推……我尝试了各种其他方法,但不知何故我无法弄清楚。希望有人能帮助我,我一定是忽略了一些东西。
谢谢。
最佳答案
不确定这是否满足您的确切选择逻辑,但不是递归解决方案:
if ( SelectedCircles[yPosition - increment, xPosition] != 1 && Circles[yPosition - increment, xPosition] == colorKey) {
SelectSurroundingCircles(xPosition, yPosition - increment)
}
//... same for other 3 directions
如果位置还没有被选中,额外的检查对于防止无休止的递归很重要
关于c# - 选择多维数组中的所有相邻值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6797083/