Общие вопросы проектирования
Вот список вещей, которые вы должны сделать в первую очередь, перед тем, как добавите что-то ещё.
Полагаю, это список ловушек, которые чаще всего приводят к переписыванию игры; чем раньше вы разберётесь с этими задачами, тем проще вам будет в дальнейшем наполнять содержимое игры.
Содержание
Время
Вы должны чётко проработать эти 4 задачи, потому что изменения в любой из них повлекут переработку во многих других местах.
- Задача 1. Определять, чей в данный момент ход.
- Задача 2. Отслеживать будущие события и запускать их в соответствии с их порядком.
- Задача 3. Управление действием эффектов, действующих через интервалы: либо в некотором абсолютном времени, либо каждый ход игрока, либо каждый ход существа.
- Задача 4. Удостовериться, что всё это работает правильно даже в тех случаях, когда игрок или монстры двигаются с увеличенной скоростью или, наоборот, заморожены/шокированы на время.
Пространство
У вас должны быть чёткие решения первых четырёх проблем "пространства". Пятая задача, если будет в вашей игре, тоже должна иметь чёткое решение. Шестая и седьмая задачи решаются стандартными алгоритмами, но если хотите, можете сделать что-то своё и, обычно, это не вызовет проблем и не повлияет на остальной код игры. Восьмая задача также решается стандартными методами и, к тому же, сюда можно добавлять новые решения.
- Задача 1. Создание и отображение карты
- Задача 2. Сохранение и загрузка карты
- Задача 3. Дистанционные эффекты, прицеливание, препятствия.
- Задача 4. Площадные эффекты и то, как они взаимодействуют с определёнными зонами
- Задача 5. Влияние игрока и/или монстров на карту.
- Задача 6. Планирование и поиск пути.
- Задача 7. Освещение, FOV, LOS.
- Задача 8. Генерация уровня.
Вещи
Вы должны реализовать все указанные стандартные действия с вещами.
- Задача 1. Поднятие.
- Задача 2. Выбрасывание.
- Задача 3. Экипировка.
- Задача 4. Использование вещи как оружие или боеприпасы.
- Задача 5. Возможность есть и пить.
- Задача 6. Складывание в контейнер.
- Задача 7. Использование как контейнер.
- Задача 8. Возможность испортить/сломать её (если вы собираетесь это реализовать).
- Задача 9. Превращение в другую вещь.
Прочее
- Написание кода для новых вещей/монстров (в вашей программе должны быть определены стандартные места, куда должен дописываться такой код, и места, где он должен вызываться в определённых случаях).
- Реализация действия эффектов вроде: времени, маны, выносливости и т.п. (в вашей программе должны быть определены места, где будут указаны параметры этих эффектов и места для хранения функций, которые определяют действия эффектов).
- Чёткая реализация того, как вещи и монстры будут представлены в игре (без вот этого запутывания ссылок, когда несколько указателей ссылаются на одну вещь; или монстр существующий сразу в нескольких местах, из-за чего его совершенно невозможно будет убить/уничтожить! В вашей программе должны быть реализованы стандартные методы для этих объектов. В идеале, сохранение/загрузка без дополнительных действий).
- Реализация сохранения/загрузки вещей и монстров в файлы сохранения (ваша программа должна уметь без проблем сохранять и загружать из файла; в идеале, автоматическое сравнивание со "стандартизированной" структурой данных).
Автор: Ray Dillinger.
Источник: Code design basics.
Перевел: Sanja, 21.03.2010.