структура данных для представления не квадратной настольной игры - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь создать настольную игру, которая не является квадратной. Здесь у нас есть 2 различных типа фигур (атакующий и защитники). Оба могут двигаться к любому соседнему свободному перекрестку. Атакующий игрок также может запрыгнуть на защитника, если в соседнем перекрестке на той же линии есть свободное место. Учитывая эти случаи, я могу думать о хранении платы как массива. Но это не правильный выбор, так как мне нужно прописать атакующую позицию из каждого индекса. нужны ваши предложения по разработке этой доски. Еще один вариант - использовать график и поддерживать направление узла (влево, вправо, сверху, вниз), но для этого потребуется 3 узла вниз в верхней вершине доски. enter image description here

1 Ответ

1 голос
/ 04 июня 2019

Два раза я должен был сделать это, я создал play_line тип данных.У меня был канонический граф с узлами и ребрами;play_line - это последовательность ребер.

Допустимое перемещение к свободному соседнему пересечению - тривиальное свойство только из графа.Кусок A в узле m может переместиться в любой узел n, где существует

  • ребро (m, n)
  • узел n пуст

Переход с m, на n, на p существует там, где существует

  • edge (m, n)
  • edge (n,p) существует
  • узел n содержит кусок D (защитник)
  • узел p пуст
  • вдоль play_line содержащего ребро (m, n), (n, p) - следующее ребро в этой строке.

Помогает ли это?


Обновление после комментария OP

Для объектов play_line нечего поддерживать, так как игровые линии не меняются после инициализации.Они жестко запрограммированы на игровом поле, что является улучшением графика.Например, если доска помечена

    a
b c d e f
g h i j k
l m n o p
  q r s

, то первая полная строка представляет собой игровую линию, содержащую пять узлов по порядку, [b, c, d, e, f].Имеются соответствующие ребра графа (правильные по построению) (b, c), (c, d), (d, e), (e, f).Обратите внимание, что ваш код должен либо пройти через это в любом направлении, либо вы делаете секунду play_line в обратном порядке.

...