Мне бы хотелось привести цитату из книги Андре Ламот - "Программирование игр для Windows советы профессионала".
"Читайте внимательно, так как я хочу сказать нечто важное. Не откусывайте больше, чем сможете пережевать! я получаю тысячи писем от новичков, которые в качестве своей первой игры твердо намерены создать игру уровня DOOM или Quake. Этого просто не может произойти. Вы должны быть счастливы, если вам удастся создать клон Asteroids за три-шесть месяцев работы, так что старайтесь не переоценить себя и ставьте перед собой реальные цели. Думайте о том, что в состоянии сделать лично вы, поскольку в конце работы, скорее всего, вы останетесь в одиночестве - все ваши помощники просто улизнут от нее. Кроме того, идея вашей первой игры должна быть простой."
Андре Ламот
Игры а-ля "Дэнди".
Игры написанные для "Дэнди" нам очень подходят в качестве уроков программирования, т.к. в основном в них довольно простая графика и не надо быть хорошим художником для её репродукции это даст возможность целиком сконцентрироваться на коде игры.
Я поставил себе цель за десять дней написать микроигру приведённую здесь. Основным было успеть за столь маленький срок сделать, что-нибудь похожее на игру, и я успел.
27.12.05 starship
Двухмерные игры с помощью
спрайтового интерфейса.
DirectDraw - устарел, как и SDK7, но те кто ими пользовался при переходе на другие технологии испытывают психологический барьер, переучиваться всегда тяжело. На самом деле стоит рискнуть, тем более что после того как освоен спрайтовый интерфейс библиотеки D3DX, никому не придет в голову возвращаться к DirectDraw, столь очивидны приемущества D3DX. Хотелось бы отметить, что спрайтовый интерфейс основан на Direct3D поэтому переход на трехмерную графику после него будет гораздо проще. Обучающие примеры по спрайтовому интерфейсу вы найдете на страничке Спрайтовый интерфейс.
Генератор миров.
Начиная создание игры более сложной чем та, которая приведена выше, мы понимаем, что нам никак не обойтись без генератора выдуманного нами мира. С него в принципе и начинается вся работа. Следует сказать, что перед этим нам необходимо нарисовать части этого мира. В силу своей художественной безграмотности я взял графику игры ShatterHand, которую и пытаюсь клонировать. ShatterHand - древняя игра на игровой приставке nintendo (У нас известная как "Dandy"). В переводе на русский Разрушительная Рука. Основная миссия в ней добраться до Шатла, зачем не помню, но для меня довольно сложная задача, ведь на Денди нет сохранения. Одно знаю, эта игра по качеству была на первых местах и сравнится с ней могли лишь единицы, для меня же она номер один в этом жанре. Кстати её можно найти на сайте эмуляторов игровых приставок www.pristavka.kulichki.net .
На создание генератора я потратил два дня, этому способствовала готовая графика и максимальное упрощение самого генератора, он редактирует, сохраняет и загружает только одну карту, к тому же он готов не полностью, но для примера сойдет.Советую сначала нажать кнопку Open. "Рисуя" игру я ничего не придумывал, а пользовался примером ShatterHand.
20.11.06 sheditor.rar
Спрайтовый генератор.
Для любой игры могут понадобится утилиты, созданные специально для неё. Это продиктовано разнообразием способов представления игрового мира. И в данном случае мне необходим генератор спрайтов способный отвечать требованиям внутренних механизмов игры.
Написанное мной приложение может создавать фрэймы и укомплектовывать их в ролики анимации, так же она может создавать поражаемые и атакующие зоны. Следует упамянуть, что для выравнивания анимации необходимо задать смещение относительно центра спрайта и установить смещение для режима зеркального отображения, так же для выравнивания.
29.11.06. shspriter.rar
Управление персонажем.
Наконец, после того как сделаны карта и анимация персонажа, мы можем приступить к работе над кодом самой игры. Управление персонажем может происходить с помощью джойстика или с клавиатуры, к тому же, если не установлен джойстик программа всё равно будет работать и управление будет осуществляться только с клавиатуры, но сам я предпочитаю джойстик ведь он для этого и создавался.
Долгое время мне неудавалось найти способ совмещения анимации персонажа и управления им, но метод научного тыка в купе с интуицией как правило всегда помогает в безвыходных ситуациях.
Здесь я выкладываю новые версии мэпэдитора и спрайтгенератора. Элементарно не помню чем они отличаются от старых и делаю это на всякий случай.
18.12.06. sheditor2.rar shspriter2.rar shwalk.rar
Пилотный проект.
То, что я произвёл, законченной игрой назвать нельзя, но уже можно видеть какой примерно может быть игра, поэтому я и назвал её пилотным проектом. Надо сказать, я получил удовольствие работая над ней. Хотя пришлось немного поломать голову, но в листинге нет ничего нового, чтобы я не выложил на сайте. Не смотря на то, что он состоит из довольно простых приёмов программирования, всё же видно, что потенциально он может вылиться в действительно настоящую игру.
Честно сказать заканчивать игру я не собираюсь, но было приятно писать её, чему способствовал спрайтовый интерфейс. Практически, я использовал почти все возможности спрайтового интерфейса: зеркальное отражение; масштабирование; изменение цвета. Остались только поворот и прозрачность, но прозрачность это всего лишь возможности цвета и поэтому технически остался только поворот. В эдиторе я использовал прямой доступ к текстуре для работы с миникартой.
Что касается искусственного интеллекта, то он основан только на дистанции между объектами и случайных числах, но получилось я думаю неплохо. Можно было бы устроить полноценный файтинг, но это требует работы гораздо больше месяца, да и получится совсем другая игра. Отступая от темы, файтинг потребовал бы не только проверки дистанции, но и слежения за действиями противника, чтобы блокировать его атаки или уходить от них, а это просто пока возможных атак не очень много. Кроме того в файтингах своя оценка силы атаки и т.д. ...
Играя, если у вас нет джойстика, пользуйтесь курсорными клавишами для движения, Alt для прыжка, Ctrl и пробелом для атаки. Случайно не нажмите на кнопку "Win", иначе приложение закончит свою работу.
Пройти этот уровень без потерь невозможно, так что когда закончится жизнь нажмите F2, чтобы восстановить её, но за это придется заплатить, вы окажетесь в начале лабиринта. F5 - игра с нуля.
Дойдя до конца, вас не поздравят с победой, но своей цели я достиг.
27.12.06. sheditor3.rar shatterhand.rar
Лестницы.
В предыдущем примере нет лестниц. Здесь же я попытался восполнить этот пробел. Наличие лестниц, увеличивает количество возможных ситуаций, что усложняет создание алгоритма управления персонажем. На самом деле сложность добавляет способность персонажа прыгать, если бы он просто ходил то алгоритм был бы гораздо проще.
15.08.07. mario.rar
Ускорение и Гравитация.
Здесь добавлены влияние ускорения и гравитации. Движения Марио стали более похожими на движения из оригинальной игры. В оригинальном "Марио", ещё присутствовал эффект инерции, но он так меня раздражал, что я решил не вводить его в собственный пример.
Когда марио стоит на месте, то его скорость как это не удивительно равна нулю. В момент начала движения скорость увеличивается на постоянную ускорения и становится равной 0.2, но с каждым шагом прибавляя ускорение, скорость достигает своего максимума и после этого марио двигается уже с постоянной скоростью 4 пикселя за шаг.
В ситуации прыжка всё происходит наоборот. В начале прыжка его шаг имеет максимальное значение и с каждым последующим шагом вверх уменьшается на постоянную гравитации в конечном итоге достигая нулевого значения, после чего естественно начинается падение. Падение повторяет ускорение, увеличиваясь с нуля до заданного вами максимума.
Если вам необходима инерция, то создайте ещё одно состояние "Инерция" в которое будет входить марио каждый раз после того как вы бросаете управление им и будет продолжать движение пока его скорость не упадет до нуля.
Это теория, на практике же всё чуть-чуть сложнее, в чём вы можете убедится посмотрев на листинг. Элементарный пример: переменная ускорения является типом float, и имеет дробные значения, положение же марио не может быть дробным иначе видеокарта смажет его с фоном и вокруг него появится каёмочка смежных цветов, так называемая интерполяция. К счастью, как видно из примера, всё это преодолимо.
22.09.09. mario2.rar mario2_exe.rar исправлен
Механизмы игры.
Самый главный секрет в программировании игр и программировании вообще, основан на вопросе – «ЕСЛИ». Если это... то – ТО, если то... то – ЭТО.
Алгоритмы игры такие же, как и в жизни, они очень просты, например: « Идешь вправо, если упираешься в стенку, то не идешь». А вот исполнение алгоритма в коде, может быть весьма даже фантастическим, всё зависит от уровня знания языка программирования и личной извращённости. В силу моей тяги к простоте и любимой поговорке: «Всё гениальное просто», а так же переиначенной мной версии этой поговорки: «Всё гениальное должно быть простым», пишу свои алгоритмы именно так как говорю: «Если это... то – ТО, если то... то – ЭТО». И начинать программировать надо именно так, а не иначе. Правда, не надейтесь на столь милую простоту в дальнейшем… Через некоторое время придёт знание, что физическая память компьютера линейна и как следствие изменение вашего стиля программирования. Ещё через некоторое время вы узнаете, что линейная память далеко не линейна и тут уж сам бог не знает, как изменится ваш стиль программирования. Это конечно из разряда шутки, в которой как водится, есть доля шутки. Но начинать надо именно с простого…
Итак, какая аркадная игра может обойтись без персонажа, конечно никакая. Все уже позабыли, что есть аркада, ну и я вместе с ними тоже забыл, хотя когда то знал. Помнится, что эта самая аркада мешала идти персонажу, куда не попадя, и наоборот помогала падать, куда не следовало бы. Вот идёт наш персонаж, как правило, вправо, а на его пути встречается стена, допустим «Китайская», не обойти! Только вот нашему герою по барабану эта самая «Китайская» и он идёт дальше. Так не должно быть, кричите вы, это не по закону «мирового тяготения», я тоже так кричал. Чтож делать, придётся писать алгоритм «непроходимости» сквозь стену.
Возьмём персонажа и посмотрим, что он из себя представляет:
У него есть центр, размеры: высота; ширина. И для простоты, из всего, что он умеет, это ходить вправо и влево. Остаётся заметить, что мир в котором существует персонаж и в который же вмещается «Китайская» стена, длиной много-много километров, этот самый мир состоит из карты 10 на 10 блоков, один блок которой размером 50 на 50 пикселов .
Мир простой и алгоритм такой же. Первым делом мы находим точку которой упрёмся в стену. Затем находим в каком блоке находится эта самая точка. Если блок «блокирован» для движения, то идти вправо мы естественно не можем. Вот и всё. Осталось записать это на языке программирования.
12.07.08. move.rar
14.07.10. move_exe.rar
Записали и смотрим. Как пологается, упёршись в стену он останавливается. Но беда в том, что ходит он по воздуху и не падает, вот уж это точно против закона тяготения. Придётся заставить его падать,а остановить падение может только проверка… Когда он упадёт окончательно, если захотите упасть ещё раз, нажмите кнопку F2.
12.07.08. move2.rar
14.07.10. move2_exe.rar
|