Как я игру делал

Замыслил я пару месяцев назад неладное. Появилась идея и не скрыться мне от неё никуда, не деться. Решил во что бы то ни стало сделать я игрушку компьютерную, да так, чтобы весь процесс от начала до конца своими ручками, чтобы понять, как всё делается, хотя бы на скромном, но рабочем примере. Сразу оговорюсь, я не программист. Последний раз на дельфи в учебном заведении что-то там программировал, да с++ слегка касался, а с тех пор не довелось. Но душа к программированию лежала всегда.

Будет 9 фото и текст





Итак, к делу. Мысль моя пока ещё витала в воздухе, и я не знал, за что же взяться. Для начала требовалось определиться с жанром игры, и я выбрал жанр «Защита башни»(Tower Defence), т.к. очень люблю подобные игры. Для тех, кто не в курсе, суть таких игр сводится к тому, чтобы не допустить врагов к некой «базе» игрока, расставляя у них на пути определённые орудия, которые можно улучшать. Если интересно в подробностях: жанр Tower Defence

С жанром определились, теперь нужно выбрать платформу для разработки. Конечно, самыми популярными, на данный момент, являются приложения под мобильные платформы. Но после недолгих раздумий, я принял решение делать приложение для «Вконтакте.ру». Во-первых, мне всегда хотелось изучить флеш, а во-вторых, вам, читающим эту заметку, смогу без проблем его показать, а вы уж, конечно, жёстко меня раскритикуете (куда ж без этого?=)).

Ох, знаю, как на здесь ЯПе вконтактик не любят, но если бы у ЯПа было API и привязка к логину пользователя, то я бы обязательно сделал бы версию и для ЯПлакал =)

Ну что ж, после небольшого обмозгования, я приступил к делу. Начал искать литературу по флешу, сначала освоил сам флеш (рисование, символы, основы) — заняло где-то дня 3, потом перешёл к изучению ActionScript 3.0 — это специальный язык программирования во флеше. Язык полноценно объектно-ориентированный. Весьма удобный и практичный. Если вдруг захочется изучить, читайте книги Колина Мука, он лучше всех пишет про AS 3.0. Итак, на изучение языка программирования ушла примерно неделя. Теория теорией, но пора и к практике переходить.

Как всё будет выглядеть, пока я не знаю. Допустим, это будет вид сверху. На экране будут проложены дорожки, по которым двигаются враги. В конце дорожки — база, которую нужно защитить. Для орудий будем делать специальные слоты. Так. Всё хорошо, но как мы будем всё это рисовать? Нужно нарисовать как минимум 5-6 видов орудий, для начала можно 3 вида врага, потом добавим больше… Ну конечно же, ведь я не зря в своё время изучал 3dsmax! Придумываем различные пушки, придумываем, чем и как они будут стрелять и поехали. Работа пошла, работа кипит!

Нужно сделать, чтобы орудия поворачивались за врагом, а то как-то не комильфо, если они в одну точку упрутся и так стоять будут. Т.к. игра не на 3d движке, то поворот будем осуществлять посредством отрисовки каждого положения орудия. Итого по 24 рисунка на каждый объект. Кроме лазера. Он у нас будет испускать луч (добра).

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



Рисуем дорожки, добавляем объекты на экран. Всё делается душевно и весело. Всегда приятно работать самому на себя. Правда ведь?

Одна из самых интереснейших вещей в подобных программах — алгоритм нахождения пути. Т.к. я твёрдо решил делать всё сам полностью с нуля (даже изобретая велосипед), то и этот алгоритм я придумывал сам. Забавно было потом узнать, что это был тот самый «волновой» алгоритм.



Где дорога, вы догадались, уверен. База вверху зелёная. И зелёные квадратики — слоты под орудия.

Никогда не думал, что школьные знания могут мне пригодиться. Основы тригонометрии, математика, пришлось кое-что припомнить из школьного курса. Ну, например, как рассчитаешь попадание врага в радиус действия орудия? Или, как вычислишь угол поворота орудия по отношению к врагу? Или движение самонаводящихся ракет, которые догоняют врага? Много чего пришлось вспомнить, и много чего пришлось штудировать заново. Мне было весьма увлекательно погрузиться в этот мир.

Ну вот, уже почти война, ракеты летят, пулемёты стреляют, взрывы бум-бум:



И тут, ни с того ни с сего мне всё это безобразие разонравилось. Ну не могу я смотреть на эту картинку — плоско уж слишком. И принимаю я стратегическое решение: перевести всю эту плоскость в изометрию. Не настоящее 3Д, но всё же намного лучше. Занял у меня этот процесс почти целый день. Или даже два. Или даже семь. Я не знаю, так как все эти дни у меня прошли как во сне. И вскоре, после всех перерисовок и дополнений, картинка стала выглядеть вот так:



Конечно, сразу она так не выглядела. Потребовалось некоторое время на исправление всех вылезших багов, отрисовку дополнительных объектов, таких как радары, фабрики, строения, деревья и прочие. Но принцип, я думаю, ясен.

К тому времени я уже сделал несколько видов врагов и приступил к созданию и программированию самолетов.



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

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



По мере прохождения игры, открываются новые карты. Я постарался сделать их как можно более разнообразными и интересными, а некоторые и с заковырками. Кроме того, я добавил в игру различные звуки: выстрелы, взрывы, турбины самолёта, запуск ракет. Со звуком стало гораздо уютнее. Звук подбирал на специальных сайтах — банках звуков. Надеюсь, что чьи-либо авторские права не нарушил.

Кроме того сделал возможность прокачивать каждое орудие, увеличивая его урон, радиус действия, скорострельность. Ресурсы прибавляются с каждой уничтоженной единицы вражеской техники и пехоты. Каждая волна врагов сильнее предыдущей и увеличивается по синусоиду.

Так как запланировал запускать игру на «Вконтакте.ру», изучил вконтактовский API. В принципе, мне от него требовалось совсем немного, а потому и разобрался я сразу же.



Самое интересное, что нужно было сделать ещё и какой-никакой сервер, да базу данных, чтобы хранить достижения игроков. А я в PHP (не говоря уже о чём-то другом) ни зубом в зуб… Т.е. я в PHP как рыба в седле. Т.е. совсем никак. Но интересно до жути. Сел изучать. Оказалось весьма несложно, если делать без защиты, шифрований и прочего. Для моего некоммерческого проекта естественно этот вариант подходит.
Итак, что мы имеем: к этому времени я доделал экраны победы и поражения. За каждую победу присуждаются звёзды от ноля до пяти. Решил, что просто складировать эти звёзды совсем неинтересно, поэтому я создал экран с улучшениями. На заработанные звёзды можно купить улучшения, которые позволят пройти игру далее и открыть следующие карты. Вот так он выглядит:



Вся инфа записывается на сервер, так что когда вы зайдёте в игру снова, все ваши достижения сохранятся.

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

Собственно, игра находится здесь: vk.com/app3660797_226581 Добро пожаловать!

P.S.

«Ну вот, игра готова» — сказал я себе месяц назад, но с тех пор каждый день работаю над ней. И это, как говорят, заядлые программисты, ещё цветочки. Да, так и есть, подтверждаю. Хоть я и не программист.

© vk.com/wall226581_6696

Источник: www.yaplakal.com/