Простой алгоритм проверки и удаления (изменения на ноль) 3 или более смежных элементов в двумерном массиве целых чисел - PullRequest
1 голос
/ 11 января 2020

Я пытаюсь сделать кирпичную стрелялку, в которой у вас есть доска (2D массив int) и набор кирпичей с каждой стороны. Например, у меня есть кирпичи 3 цветов, представленные номерами 1, 2, 3, и я помещаю их в случайных местах на доске. Когда игрок стреляет одним кирпичом со стороны доски, он идет прямо к первому кирпичу, который встречается на доске или к краю.

Проблема в том, что когда 3 или более кирпича одного цвета смежны, они должны быть удалены. Я не совсем знаю, как реализовать это ... Язык программирования, который вы выбираете, не имеет значения, если возможно увидеть логи c за этим кодом для начинающего, как я.

... и также это мой первый вопрос на сайте, так что не нападайте на меня, если что-то не так.

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Одним из возможных решений является реализация алгоритма заливки. Он найдет все блоки, прикрепленные к блоку попаданий, и все блоки, прикрепленные к ним, и все ... et c.

Здесь ячейка - это дискретное пространство в массиве, например, позиция [ n, m] в массиве.

  1. Вставить в active начальную ячейку (блок попаданий)
  2. Выбрать любую ячейку c из активно
  3. Вставьте c в закрыто и удалите из активно
  4. Вставьте в active соответствующие значения соседних соседей c НЕ в closed или active
  5. Если active имеет ячейки, перейти к шагу 2, иначе продолжить
  6. Все значения в closed могут быть удалены
0 голосов
/ 11 января 2020

Я думаю, что вы ищете, это матрица смежности, в которой вы будете указывать каждому блоку, какой цвет имеет соседний блок.

Таким образом вам будет легко узнать, являются ли блоки иметь такой же цвет. Если вы не знаете, что такое матрица смежности, я дам вам ссылку, чтобы узнать, как они работают.

https://www.sciencedirect.com/topics/computer-science/adjacency-matrix

Это должен помочь вам, чтобы преодолеть вашу проблему.

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