Как я могу лучше реализовать свою реализацию пазла 5x5 с кнопками, которые активируют окружающие кнопки на сетке, используя 2D Array? - PullRequest
0 голосов
/ 27 февраля 2020

Цель, которую я пытаюсь достичь, - создать сетку кнопок 5х5. Когда вы переключаете кнопку, кнопки, окружающие кнопки, которые вы переключаете, должны переключаться вместе с ней. Вот сетка:

   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 есть «стена». Я был в состоянии сделать это, но моя реализация ужасна:

   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;
}

Я хотел бы посмотреть, может ли кто-нибудь предложить идеи для лучшей реализации этого.

1 Ответ

1 голос
/ 27 февраля 2020

Вы можете сделать его менее жестко закодированным:

  • Вам нужно нажать кнопку x | y для кнопки
  • , тогда вы можете автоматически нажимать другие кнопки в соседних положениях: кнопка (x-1 | y-1), кнопка (x-1 | y), ...
  • , но вы должны добавить некоторые исключения для кнопок в позициях с x = 0, y = 0, x = 4, y = 4, поэтому вы не пытаетесь нажимать кнопки, которых не существует

Если вам нужна дополнительная помощь, вы можете попросить меня снова. Я делал симуляцию раньше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...