Как бы вы создали базу данных для хранения лабиринтов и игр, в которые играли в одни и те же лабиринты? - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть задание создать базу данных для хранения лабиринтов и игр, в которые они играют.

Лабиринт - это, по сути, сетка, содержащая призы и ловушки. Задание не является более конкретным: оно просит нас найти какие-то общие правила для выражения событий, происходящих в игре, и правила для этих событий.

Я записал простую концептуальную схему этого: enter image description here

Как вы думаете, исходя из моего описания задания, это хорошее решение? Как я могу улучшить это?

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Таким образом, лабиринт - это сетка, в которой каждый узел содержит данные.Каждый узел содержит несколько вещей: 1) список ссылок на другие узлы 2) список элементов, доступных на этом узле

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

Это предполагает таблицу MAZE, содержащий основные данные о лабиринте, такие как его идентификатор, имя, описание и т. д. Затем есть таблица NODE, содержащая данные об узле.ID, NAME, COORDINATES и MAZE_ID 3-й ITEM, с ID, ITEM_NAME, NODE_ID, ITEM_TYPE и, возможно, другими вещами.

Для ускорения операций поиска вам может потребоваться таблица ссылок MAZE_NODE, содержащая только MAZE_ID и NODE_ID свнешние ключи для обеих таблиц, а также таблица NODE_ITEM с аналогичными полями NODE_ID и ITEM_ID.

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

И это просто очень простая структура данных для лабиринта.Для истории, вам, по крайней мере, понадобятся таблицы с текстами, главами, условиями запуска каждой главы и т. Д. И т. Д. Это в значительной степени не зависит от лабиринта, хотя условия могут включать в себя нахождение игрока вконкретное место в лабиринте, или сказать ему, чтобы перейти к определенному месту.

0 голосов
/ 18 февраля 2011

Вы должны разделить задачи на

1) магазин лабиринт 2) хранить события

Учитывая (2), у вас все в порядке с реляционной базой данных регистрация событий, даже включая движение вашего героя в одной таблице со списком столбцов:

игра | время | актер | тип события | данныеСобытия

(Не создавать таблицу за игру;)

Учитывая (1): Вы должны хранить лабиринт в виде сетки. Это может быть реализовано с помощью массива, например одиночные байты (способные хранить стену, свободно, плюс 254 элемента) на ячейку сетки, описывающую ее тип. От вас зависит, где вы храните этот массив, но если вы храните его в базе данных, не пытайтесь разбить лабиринт и ячейки на разные таблицы (отношение 1: n, которое вы описали), просто сохраните лабиринт как BLOB в таблице, которая содержит BLOB-объекты всех ваших лабиринтов.

...