Структура данных для представления лабиринта

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

1 ответов


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

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

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

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

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

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

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