Как написать рогалик за 15 шагов

Материал из Клуб любителей рогаликов
Перейти к: навигация, поиск

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

Пожалуйста, оставьте свои комментарии - возможно, мы сделаем эту статью действительно полезной. Какие у вас есть пути?

Шаг 1 - Принятие решения написать свою игру

Большинство из вас, скорее всего уже прошли этот момент, но тут есть несколько намёков о направлении первого шага. Я думаю, лучшая причина начать разработку собственного рогалика - это создание игры, в которую ты сам мог бы играть с удовольствием. Это как в моём случае.

Не надо спрашивать всех подряд о том, что такое "roguelike-игра" - тебе это не нужно. Если игру, которую ты создаёшь, другие не могут назвать рогаликом, но тебе всё равно весело играть в неё - ты на правильном пути. Это не соревнование по написанию игры, соответствующей неким стандартам.

Не планируй слишком много. Разумеется, если ты хочешь реализовать некоторые вещи в своей игре, то ты должен оставить место для них - но даже не пытайся предусмотреть всё возможное - это не реально. Когда ты пишешь дизайн-документ, то принимаешь множество решений. Большинство из них не могут быть реализованы без предварительного тестирования - обычно, для этого пишется небольшая программка, использующая данную идею. Лучший способ принимать решения, когда твой проект достиг такой стадии, что тебе не надо писать дополнительные программы, потому что проект уже имеет всё, что тебе нужно.

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

Шаг 2 - Привет, мир (Hello world)!

Подготовь свою программную мастерскую. Выбери язык программирования и платформу, найди подходящие компиляторы/интерпретаторы, редактор, систему контроля версий, автоматизированный сборщик и другие утилиты. Настрой их так, чтобы тебе было удобно с ними работать.

Определись, какие библиотеки тебе придётся использовать. Конечно, позже их можно поменять на другие, но обычно это очень болезненный процесс. Не думай слишком много о переносимости - это можно поправить позже. Лучше подумай, что тебе нужно и с чем тебе будет удобнее.

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

Напиши простенькую 'Hello world!' программу и проверь её работоспособность. Протестируй свои библиотеки и т.д. - тебе не нужно никаких сюрпризов.

Начинай писать код.

Шаг 3 - Это человек!

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

Сделай функцию чтения нажатых клавиш (никаких файлов настроек, никаких переопределений клавиш).

Создай демо - "@ бегает по пустому экрану". Поиграй в неё немного, измени, если что-то не понравится, поиграй ещё, представь, будто игра уже закончена, и ты играешь в неё. ;)

Напиши функции вывода сообщений - особенно для отладочных сообщений - это очень удобно.

Шаг 4 - Карта

Определись со структурой карты. Не старайся предусмотреть всё возможное - если что, можно будет добавить позже. Сделай, чтобы (пустая) карта отображалась на экране. Скроллируемая, если нужно. Добавь несколько элементов на карту, чтобы увидеть, правильно ли они отобразились (пиши карту прямо в коде, генератор карт пока не нужен).

Пусть "@" появится на карте - сначала не как её элемент, а просто как курсор. Проверь скроллирование, можно добавить команду "просмотр" (look).

Теперь преврати "@" в существо. Т.к. ты до сих пор этого не реализовал, то сделай, чтобы функции чтения клавиатуры просто перемещали его по карте. Включи проверки столкновения со стенами в код движения. Можно добавить двери и команды их открытия/закрытия.

Шаг 5 - Сохранение/Загрузка

Теперь нужно сделать чтения карты из файла, вместо чтения из кода. Ты можешь поэкспериментировать с этим и проверить различные варианты, если сразу сделаешь карту, доступную для изменения в обычном текстовом редакторе.

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

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

Теперь, если ты не будешь уверен, правильно ли некоторый элемент игры работает, просто сохраняй игру в файл и там проверь.

Шаг 6 - Он живой! Живой!

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

Начни с системы "мой ход - твой ход", затем можешь реализовать такую временную систему, какую ты хочешь (либо, обычно, создают упрощённую систему, а позже её усложняют).

Не забывай тестировать всё, что ты реализуешь.

Шаг 7 - Взаимодействие

Добавь характеристики существам. Возможно несколько упрощённые, чем ты представлял. Лучше добавлять характеристики тогда, когда они понадобятся, а не потому что "они классно смотрятся", хотя не исключено, что ты не сможешь сопротивляться этому ;)

Сделай, чтобы существа могли видеть действия других - движения, атаки и т.д. Улучшай их AI, так, чтобы они смогли преследовать игрока.

Реализуй и протестируй систему боя - для начала без экипировки, просто подбирай значения в коде. Очень много тестируй.

Шаг 8 - Файлы данных

Помести существ, свойства карты и т.п. информацию в файлы данных. Забудь пока что о скриптах. Если что-то нельзя переместить в файлы, пусть пока остаётся.

Шаг 9 - Вещи

Добавь вещи. Сначала это будут просто объекты, которые можно подобрать - без каких-либо свойств. Затем давай им свойства, типы, характеристики и т.д. Реализуй инвентарь, "поднятие" и "выкидывание", "одевание" и "использование" (пока без эффектов), а также складывание в кучи, контейнеры (если такие нужны) и т.д.

Это довольно большой шаг, требующий много тестирования.

Шаг 10 - Магия

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

Шаг 11 - Простенькая игра

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

Меняй всё, что хотел изменить. Не забывай много тестировать. Всегда проси кого-нибудь оценить "фактор интереса" твоей игры, либо оцени его сам, после некоторого перерыва в разработке - сейчас довольно сложно заметить все недостатки.

Этот период займёт достаточно много времени, до тех пор, пока не получишь играбельную, интересную мини-игру.

Шаг 12 - Уровни

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

Распредели монстров и вещи на определённых уровнях. Добавляй больше монстров и существ, со своими свойствами, если нужно.

Шаг 13 - Опыт

Начни разработку системы опыта и системы умений. Настрой характеристики монстров и вещей. Сделай экран создания персонажа, выбора класса, расы или чего ещё нужно.

Много играй в свою игру.

Шаг 14 - Жители

Добавь NPC, продавцов, простенькие квесты - если это всё тебе нужно. Продолжай добавлять игровые возможности и настраивать характеристики.

Шаг 15 - Полная свобода

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

Напиши генератор случайных квестов, систему гильдий, генератор бесконечного мира, AI на нейронной сети и т.д. - ты можешь проверить всё это на работающей игре.



Автор: Radomir 'The Sheep' Dopieralski.
Источник: неизвестен.
Перевел: Sanja, 3.12.2006.