Структура данных для представления лабиринта - PullRequest
10 голосов
/ 29 декабря 2010

Я пишу игру «Динамический лабиринт», в которой после каждого времени структура лабиринта будет меняться (некоторые двери будут закрыты, а некоторые откроются. Что-то вроде Triwazard в HP4).Может кто-нибудь предложить мне, какая структура данных будет лучше всего подходить для представления этого?

1 Ответ

11 голосов
/ 29 декабря 2010

Будет ли лабиринт прямоугольной сеткой?Что-то еще?

Это также зависит от того, какая часть карты будет содержать полезную информацию (проходы или объекты).

Если это прямоугольная сетка и большинство квадратов сетки будут содержать что-то, хорошие данныеструктура представляет собой двумерный массив (массив массивов), причем каждый элемент массива представляет 1 строку, каждый элемент внутренних массивов представляет 1 ячейку в этой строке, которая является объектом, содержащим данные, относящиеся к этой ячейке (соседние ячейки которых могут бытьпереместился в, что содержит ячейка, есть ли на ней символ)полезный в (например, непроходимые блоки), хорошая структура данных - это граф.

Каждая вершина графа - это проходимая ячейка.Края представляют пары ячеек, между которыми вы можете перемещаться (вы можете сделать это ориентированным графом, если некоторые двери только односторонние).Каждая вершина / ячейка является объектом, содержащим информацию об этой ячейке (например, ее местоположение в физическом лабиринте, который должен быть нарисован, и т. Д.).

Преимущество структуры массив-массив состоит в том, что ОЧЕНЬ легконарисовать его, и достаточно просто обработать (любое движение - это просто удаление индекса).Добавление / удаление стен так же просто, как и изменение данных в двух элементах массива соседних ячеек.

Преимущество структуры графа состоит в том, что он занимает намного меньше места, если проходы лабиринта очень редки (например, только 1/100поля проходит);это единственная структура, которая может представлять случайную (например, не прямоугольную сетку) геометрию, и обработка довольно проста.Добавить / удалить стены легко, так как это просто добавление ребра к графику.

...