c# - 选择多维数组中的所有相邻值

标签 c# multidimensional-array xna

我正在制作一款类似泡泡龙的游戏。我的代码使用两个二维数组,一个包含颜色索引 (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/

相关文章:

c# - 应用程序不支持通过/common 或/consumers 端点错误 AD 登录

javascript - 如何在Javascript中从二维数组中过滤重复的整数和字符串子数组

C# 在父类(super class)中调用重写的方法

c# - 如何拆分一个长字符串,使其与给定的矩形匹配?

c# - SpriteBatch.DrawString 中原点和位置参数的区别

c# - 如何标记通用委托(delegate)以接受空值?

c# - 使用 MVC5 更新 EF5 中的 Db

C# - 如何在多显示器上下文中获得真实的屏幕分辨率?

java - java数组对象的所有索引都具有相同的值

c++ - C++ 中的多维复数值数组