Привет всем! Начну по-порядку.
theCrow писал(а): ↑03 ноя 2011, 22:48Реализация инфраструктуры игровых объектов
Весь мир генерируется на основе массивов объектов с переменными, принадлежащим соответствующему классу.
Например, у нас есть класс StarshipClass, определяющий всё, что касается объектов кораблей. Также есть массив под названием StarshipObject, каждый элемент которого презентует отдельный корабль.
Класс StarshipClass определяется следующим образом:
StarshipClass.Player - владелец корабля.......
Не совсем понятно, для чего нужны массивы одновременно с БД в данном случае?
Постоянно массивы загружать и выгружать в/из БД. То есть получится, где то забыл добавить строку с обработкой нового элемента и ОППА - ошибка! Опять таки нагрузка на процессор и оперативную память. Все это не то, по крайней мере с моей колокольни.
Мое предложение следующее.
Использовать только по одному классу на каждую сущность (корабль, звезда, планета, ну и т.д.). А так же использовать виртуальную БД, очень мне понравившуюся в шарпе, - DataTable. Эта база данных находится в ОЗУ (памяти). В любой момент можно легко сохранить, загрузить, обратиться к любой ячейке данных.
Как все это будет происходить. Пишутся классы на каждую сущность со всеми полями и их типами. Каждый класс располагается отдельным файлом-библиотекой (*.dll). Все эти фалы в отдельной папке. Затем пишется код для работы с виртуальной БД следующим образом. Проверяется наличие сохраненных файлов БД-таблиц (DataTable). Название файлов будет соответствовать названию класса. Если какой-то БД-таблицы (далее БД) не существует, генерируется БД согласно недостающего класса сущности. То есть тупо будет проверяться количество файлов и поочередная их обработка. На каждую сущность своя БД. Название столбцов с точностью соответствует названию полей сущности (класса). Какими данными будет заполняться каждая таблица? За это будут отвечать файлы-библиотеки (*.dll) также расположенные в отдельной папке. То есть, расположение звезд, технические данные кораблей, расс и т.д., виды сущностей можно изменить простым изменением пути расположения всех папок, файлов (простыми словами МОД игры).
Если файл БД найден будет происходить проверка названия столбцов согласно класса.
Если файл БД найден, а класса такого нет, файл БД удаляется. Чтобы не было лишнего мусора в процессе написания игры.
Этим способом программист не тратит время на постоянное изменение, добавление, удаление нужных полей. Достаточно будет просто добавить/изменить поле в классе или создать новый класс, остальное все само изменится. Первый стобец (нулевой) будет содержать порядковый номер строки (в шарпе есть автонумерация), так сказать индивидуальный нумерованный адрес объекта сущности. Также игра будет легко поддаваться обновлению и исправлению багов, и даже в большинстве случаев, не требующая начинать всю игру заново, как это происходит в Civilization после каждого обновления (меня это очень напрягает).
Назовем все мною написанное примерно так: "Движок БД".
Т.к. все БД будут находиться в памяти, скорость обработки говорит сама за себя. Если кто то будет переживать за нехватку памяти из за БД, хотя я сомневаюсь в ее нехватке на такую игру, можно загружать и выгружать поочередно все БД. Но так как Виндовс при нехватке памяти, начинается использовать жесткий диск, опять таки не вижу в этом необходимости.
Все координаты, флаги и т.д. сущностей будут напрямую меняться в БД. И ни каких массивов! Так как БД в памяти это есть своего рода массив.
Если кого то беспокоит вопрос: "Как сделать автогенерацию всех БД и как это возможно?". То отвечу сразу: "Возможно! Я сделал, все работает, все супер!. Сделал это в своем проекте.".
Виртуальные БД можно сохранять двумя типами файлов:
1. Тип XML - (плюсы - возможность редактировать прямо в блокноте, минусы - большой размер файла, больше времени на загрузку в память и сохранение в файл)
2. Тип BIN(двоичный) - (плюсы - маленький размер файлов, мизерное время на загрузку в память и сохранение в файл; минусы - невозможность редактирования, требуется написание своего редактора для любителей создания МОДов)
Все БД для запуска игры предлагаю хранить в типе XML. Сохранку игры предлагаю хранить в типе BIN. Для этого просто необходимо добавить все таблицы в DataSet(набор таблиц) и сохранить одним файлом. Для сохранки, возможно, будут требоваться не все таблицы, поэтому можно будет добавлять только необходимые (например, зачем в сохранке таблица, с расположением файлов звуковых эффектов; прикрепленные к типу кораблей расположения путей к файлам графики и др.)...
Потратив время на создание движка БД, вы очень сильно сократите время на создание игры.
Добавлено через 2 минуты 18 секунд
Если у кого то есть переживание о кроссплатформенности игры, то лучше опираться на большинство. А 90% пользователей сидят на Винде
Добавлено через 2 минуты 49 секунд
Для работы с DataSet не требуется знание языка запросов типа SQL, Oracle и др. Также не требуется знание LINQ, но знание LINQ немного упрощает написание кода и сокращает количество строк.