我怎样才能更好地实现 5x5 网格按钮拼图的实现,这些按钮使用 2D 数组激活网格上的周围按钮?

How can I better achieve my implementation of a 5x5 grid puzzle of buttons that activate the surrounding buttons on the grid using a 2D Array?

我想要实现的目标是拥有一个 5x5 的按钮网格。当你切换一个按钮时,你切换的按钮周围的按钮应该与它一起切换。这是网格:

   private static final int[][] GRID = {
        {4, 5, 6, 7, 0},
        {9, 10, 11, 12, 13},
        {14, 15, 16, 17, 18},
        {19, 20, 21, 22, 23},
        {24, 25, 26, 27, 28}
};

因此,如果我按下按钮 16,我需要按钮 10、11、12、17、22、21、20 和 15 一起切换。我遇到的一个主要问题是,如果我要切换按钮 4,则只有按钮 5、10 和 9 应该随它激活,因为按钮 4 的左侧和上方有一个 "wall"。我已经能够做到这一点,但我的实现很糟糕:

   private void setButtonActivated(Player player, int button) {
        player.setButtonActivated(button);
        for (int b : getConnectedTiles(button)) {
            player.setButtonActivated(b);
        }
    }

private int[] getConnectedTiles(int button) {
    switch (button) {
        case 4:
            return new int[] { 5, 10, 9 };
        case 6:
            return new int[] { 5, 10, 11, 12, 7 };
        case 16:
            return new int[] { 10, 11, 12, 17, 22, 21, 20, 15 };
    }
    return null;
}

我想看看是否有人可以提供更好地实现它的想法。

您可以减少硬编码:

  • 您需要按下按钮的 x|y 位置
  • 然后你可以自动按下相邻位置的其他按钮:button(x-1|y-1), button(x-1|y), ...
  • 但您必须为 x=0、y=0、x=4、y=4 位置的按钮添加一些例外,这样您就不会尝试按下不存在的按钮

如果需要更多帮助,可以再问我。我以前做过模拟