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

Замыслил я пару месяцев назад неладное. Появилась идея и не скрыться мне от неё никуда, не деться. Решил во что бы то ни стало сделать я игрушку компьютерную, да так, чтобы весь процесс от начала до конца своими ручками, чтобы понять, как всё делается, хотя бы на скромном, но рабочем примере. Сразу оговорюсь, я не программист. Последний раз на дельфи в учебном заведении что-то там программировал, да с++ слегка касался, а с тех пор не довелось. Но душа к программированию лежала всегда. Будет 9 фото и текст Как я игру делал Итак, к делу. Мысль моя пока ещё витала в воздухе, и я не знал, за что же взяться. Для начала требовалось определиться с жанром игры, и я выбрал жанр "Защита башни"(Tower Defence), т.к. очень люблю подобные игры. Для тех, кто не в курсе, суть таких игр сводится к тому, чтобы не допустить врагов к некой "базе" игрока, расставляя у них на пути определённые орудия, которые можно улучшать. Если интересно в подробностях: жанр Tower Defence С жанром определились, теперь нужно выбрать платформу для разработки. Конечно, самыми популярными, на данный момент, являются приложения под мобильные платформы. Но после недолгих раздумий, я принял решение делать приложение для "Вконтакте.ру". Во-первых, мне всегда хотелось изучить флеш, а во-вторых, вам, читающим эту заметку, смогу без проблем его показать, а вы уж, конечно, жёстко меня раскритикуете (куда ж без этого?=)). Ох, знаю, как на здесь ЯПе вконтактик не любят, но если бы у ЯПа было API и привязка к логину пользователя, то я бы обязательно сделал бы версию и для ЯПлакал =) Ну что ж, после небольшого обмозгования, я приступил к делу. Начал искать литературу по флешу, сначала освоил сам флеш (рисование, символы, основы) - заняло где-то дня 3, потом перешёл к изучению ActionScript 3.0 - это специальный язык программирования во флеше. Язык полноценно объектно-ориентированный. Весьма удобный и практичный. Если вдруг захочется изучить, читайте книги Колина Мука, он лучше всех пишет про AS 3.0. Итак, на изучение языка программирования ушла примерно неделя. Теория теорией, но пора и к практике переходить. Как всё будет выглядеть, пока я не знаю. Допустим, это будет вид сверху. На экране будут проложены дорожки, по которым двигаются враги. В конце дорожки - база, которую нужно защитить. Для орудий будем делать специальные слоты. Так. Всё хорошо, но как мы будем всё это рисовать? Нужно нарисовать как минимум 5-6 видов орудий, для начала можно 3 вида врага, потом добавим больше... Ну конечно же, ведь я не зря в своё время изучал 3dsmax! Придумываем различные пушки, придумываем, чем и как они будут стрелять и поехали. Работа пошла, работа кипит! Нужно сделать, чтобы орудия поворачивались за врагом, а то как-то не комильфо, если они в одну точку упрутся и так стоять будут. Т.к. игра не на 3d движке, то поворот будем осуществлять посредством отрисовки каждого положения орудия. Итого по 24 рисунка на каждый объект. Кроме лазера. Он у нас будет испускать луч (добра). Итого из орудий: пулемёт, пушка, стреляющая ядром, ракетница, лазер, замедлитель (замедляет движение врага) и огнемёт. У каждого орудия есть свои характеристики: урон, радиус действия, скорострельность. Есть ещё не явные, например, ядро пушки поражает сразу несколько врагов, в то время как другие должны стрелять только по одной цели. Помимо всего этого, разрабатываем общий интерфейс игры. Сейчас он выглядит скромно... я бы даже сказал, весьма и весьма скромно: Как я игру делал Рисуем дорожки, добавляем объекты на экран. Всё делается душевно и весело. Всегда приятно работать самому на себя. Правда ведь? Одна из самых интереснейших вещей в подобных программах - алгоритм нахождения пути. Т.к. я твёрдо решил делать всё сам полностью с нуля (даже изобретая велосипед), то и этот алгоритм я придумывал сам. Забавно было потом узнать, что это был тот самый "волновой" алгоритм. Как я игру делал Где дорога, вы догадались, уверен. База вверху зелёная. И зелёные квадратики - слоты под орудия. Никогда не думал, что школьные знания могут мне пригодиться. Основы тригонометрии, математика, пришлось кое-что припомнить из школьного курса. Ну, например, как рассчитаешь попадание врага в радиус действия орудия? Или, как вычислишь угол поворота орудия по отношению к врагу? Или движение самонаводящихся ракет, которые догоняют врага? Много чего пришлось вспомнить, и много чего пришлось штудировать заново. Мне было весьма увлекательно погрузиться в этот мир. Ну вот, уже почти война, ракеты летят, пулемёты стреляют, взрывы бум-бум: Как я игру делал И тут, ни с того ни с сего мне всё это безобразие разонравилось. Ну не могу я смотреть на эту картинку - плоско уж слишком. И принимаю я стратегическое решение: перевести всю эту плоскость в изометрию. Не настоящее 3Д, но всё же намного лучше. Занял у меня этот процесс почти целый день. Или даже два. Или даже семь. Я не знаю, так как все эти дни у меня прошли как во сне. И вскоре, после всех перерисовок и дополнений, картинка стала выглядеть вот так: Как я игру делал Конечно, сразу она так не выглядела. Потребовалось некоторое время на исправление всех вылезших багов, отрисовку дополнительных объектов, таких как радары, фабрики, строения, деревья и прочие. Но принцип, я думаю, ясен. К тому времени я уже сделал несколько видов врагов и приступил к созданию и программированию самолетов. Как я игру делал Как поговаривают заядлые программисты, написание кода - это самая малая часть времени разработки программы. 99% времени же уходит на исправление уже написанного. Это, скажу я вам, чистая правда, хоть я и не программист. Пулеметы уже стреляли, ядра с ракетами взрывались, лазер прожигал врагов, а замедлитель их, соответственно, замедлял. Пора было разрабатывать общий интерфейс игры: главное меню, меню выбора карт, экран помощи и т.д. Чем, я собственно и занялся. Вот, например, так выглядит экран для выбора карт: Как я игру делал По мере прохождения игры, открываются новые карты. Я постарался сделать их как можно более разнообразными и интересными, а некоторые и с заковырками. Кроме того, я добавил в игру различные звуки: выстрелы, взрывы, турбины самолёта, запуск ракет. Со звуком стало гораздо уютнее. Звук подбирал на специальных сайтах - банках звуков. Надеюсь, что чьи-либо авторские права не нарушил. Кроме того сделал возможность прокачивать каждое орудие, увеличивая его урон, радиус действия, скорострельность. Ресурсы прибавляются с каждой уничтоженной единицы вражеской техники и пехоты. Каждая волна врагов сильнее предыдущей и увеличивается по синусоиду. Так как запланировал запускать игру на "Вконтакте.ру", изучил вконтактовский API. В принципе, мне от него требовалось совсем немного, а потому и разобрался я сразу же. Как я игру делал Самое интересное, что нужно было сделать ещё и какой-никакой сервер, да базу данных, чтобы хранить достижения игроков. А я в PHP (не говоря уже о чём-то другом) ни зубом в зуб... Т.е. я в PHP как рыба в седле. Т.е. совсем никак. Но интересно до жути. Сел изучать. Оказалось весьма несложно, если делать без защиты, шифрований и прочего. Для моего некоммерческого проекта естественно этот вариант подходит. Итак, что мы имеем: к этому времени я доделал экраны победы и поражения. За каждую победу присуждаются звёзды от ноля до пяти. Решил, что просто складировать эти звёзды совсем неинтересно, поэтому я создал экран с улучшениями. На заработанные звёзды можно купить улучшения, которые позволят пройти игру далее и открыть следующие карты. Вот так он выглядит: Как я игру делал Вся инфа записывается на сервер, так что когда вы зайдёте в игру снова, все ваши достижения сохранятся. Вроде всё смотрится прилично, но не только в обложке дело. Красота в компьютерной игре далеко не самое главное, даже в самых крутых и красивых играх. Ведь если в неё неинтересно будет играть, слишком сложно, или слишком легко, или слишком муторно, или наоборот слишком быстро - все эти факторы испортят впечатление об игре. Баланс - вот, что самое главное. К нему я приступил с самого начала разработки, и, признаюсь честно, не отточил до сих пор. Впрочем, вконтакт не запрещает обновлять свои приложения, так что сделаем - отточим. Собственно, игра находится здесь: http://vk.com/app3660797_226581 Добро пожаловать! P.S. "Ну вот, игра готова" - сказал я себе месяц назад, но с тех пор каждый день работаю над ней. И это, как говорят, заядлые программисты, ещё цветочки. Да, так и есть, подтверждаю. Хоть я и не программист. © http://vk.com/wall226581_6696 Источник: http://www.yaplakal.com/