Урок 3. Перед программированием
Чем и кем будем управлять?
И теперь остается решить, как же будет
происходить управление самой игрой. Припомним известные нам ролевые и
стратегические игры и остановимся на таком варианте: герой находится в центральной
части окна (видимой области карты). При нажатии на клавиши-стрелки он
перемещается на соседние тайлы, а при приближении к границам видимой области происходит
автоматическая прокрутка (скролл) карты так, чтобы герой по прежнему оставался
в центральной части видимой части.
Если герой сталкивается
с непроходимым тайлом, то он остается на месте. Если на пути движения героя находится
монстр, то начинается схватка. Если герой находится на тайле с некоторым
предметом, то он может этот предмет поднять. Вот в принципе и все, что нам
потребуется на первых порах для создания игры!
Скролл Карты (Прокрутка)
К важнейшей
особенности управления игрой необходимо отнести автоматическое прокручивание
видимой части карты, которая как правило гораздо меньше всего доступного пространства
локации.
Как его реализовать
проще всего? Очевидно, прежде всего нам понадобятся две переменные, которые
будут хранить координаты левого верхнего угла видимой области по отношению к
левому верхнему углу всей карты (локации).
После того, как
герой сдвинулся на соседний таил, надо будет проверить, не приблизился ли он к границе
видимой части окна слишком близко (например, на расстояние в два или три тайла).
Если "опасная" граница преодолена, мы просто изменим (уменьшим или
увеличим) уже упомянутую переменную, хранящую соответствующую координату угла
видимой части. После перерисовки этой части нужный образ карты появится на
экране автоматически.
Отметим еще
одну особенность, полезную при реализации автоматической прокрутки. Больше всего
проблем возникает здесь при программировании ситуаций, когда герой находится у
краев основной карты (локации), и изменять переменные с координатами угла видимой
части нельзя - они могут стать меньшими нуля или больше допустимых значений. Решается
(точнее, обходится) эта ситуация очень просто. Края глобальной карты заполняются
непроходимыми тайлами на расстояние, равное размеру видимой части окна по соответствующей координате. При этом герой
никогда не сможет приблизиться к краям глобальной карты, и неприятных ситуаций
не возникнет.
Выбop системы
программирования.
На каком языке
писать игру? Какую систему программирования выбрать? Ответы на эти вопросы
будут принципиальными только в одном случае - когда игра создастся группой и к
считана на коммерческие продажи. Тогда важно учитывать умения каждого разработчика,
а также ориентироваться на мировые стандарты в этой области. Так, фактически
все специализированные библиотеки и пакеты графического моделирования ориентированы
прежде всего на язык Си++ и компилятор Microsoft Visual C++, хотя могут
одерживать и другие средства разработки. Однако оптимальнее всего их
использовать в программах на Си++.
Но мы
рассматриваем учебный пример, демонстрирующий прежде всего принципы построения
архитектуры достаточно большой программы, поэтому правильнее всего в нашем
случае будет выбрать учебный язык программирования (Паскаль), имеющий
эффективную реализацию для ДОС (TurboPascal) и Windows (Delphi), и допускающий
применение каких-нибудь общедоступных средств быстрой спрайтовой графики. В
нашей игре для этих целей можно задействовать, например, свободно
распространяемую и написанную нашим соотечественником графическую библиотеку g32
(www.g32.org). Создание программ будет вестись
в Turbo/Borland Pascal и Delphi 7.
Кстати, хорошо
бы кто-нибудь попробовал продублировать этот процесс в среде Free Pascal (frecpascal.ru) - свободном клоне Turbo Pascal, поддерживающим
не только ДОС, но и с десяток других платформ - Linux, Mac, OS/2 и еще что-то
не менее экзотическое. Причем исходный код менять почти не приходится -
достаточно лишь указать в настройках, для какой системы нужен двоичный файл, и
все! Приступаем к самому вкусному
Ну вот мы и
подходим к самой интересной части нашего учебного проекта- подготовке исходных
текстов и собственно созданию игры. Пусть в первом приближении (на первой
итерации) должна быть создана программа, показывающая на экране видимую часть
карты. Пока никаких героев, предметов или монстров на ней не будет. Итак, первый
этап нацелен на создание модуля, ответственного за работу с картой.
|