Когда я был маленьким, я писал авиасимулятор

Всем привет!
Хотелось бы начать с того, что мне было очень приятно читать комментарии к статье Как я стал не пойми кем, в которых некоторые хабровчане поделились мнением и краткими историями из своей карьеры.

Отвечая на один из комментариев я сказал, что мой путь к в разработку начался с 10 класса. И в тот момент меня накрыла волна флешбеков из детства и я полез перекапывать свои сменные носители в поисках того самого проекта, с которого всё началось. Внезапно для себя я его нашёл и подумал поделиться с вами историей его создания.

6e0c18b680ede0eb9d54568c35e9e809.png

Для простоты чтения история разделена на несколько частей, первые две из которых изложены в этой статье.

Часть 1. Предыстория

На дворе был апрель 2011 года, я заканчиваю 10-й класс. К тому моменту уже 8 месяцев как изучал Паскаль, кодил в Turbo Pascal и делал это в рамках подготовки к ЕГЭ. По-моему это был обычный учебный день, как вдруг мне позвонил репетитор по информатике и состоялся примерно следующий диалог:
— Привет, не хочешь принять участие в городской конференции по информатике?
— А это что такое?
— Ну это конференция для школьников, где ребята представляют свои проекты, в том числе по программированию. Хочешь поучаствовать?
— Да, конечно! Но я даже не представляю, что писать для конференции.
— Да что угодно. Если нет идеи, то напиши хотя бы калькулятор. А там заодно уже посмотришь с какими проектами выступают ребята. Тебе должно быть интересно.
— Ну-у-у-у-у… Ладно, я попробую.

Спустя пару дней я вспомнил, что дома где-то среди груды дисков видел коробку из-под Borland Delphi 7, и решил посмотреть что это. После распаковки, установки и просмотра примеров, к моему счастью, обнаружил, что синтаксис Delphi был, как у Паскаля. Следом я принялся осваивать новый IDE.

Потратив несколько дней на ознакомление со средой разработки, я приступил к написанию калькулятора, внешне очень похожего на стандартный калькулятор из Windows XP.

Именно такую версию с расширенными математическими функциями я пытался реализовать

Именно такую версию с расширенными математическими функциями я пытался реализовать

В нем можно было вводить данные с элементов интерфейса и клавиатуры. Счастливый и довольный после нескольких дней разработки я поделился новостью со своим одноклассником о том, что написал калькулятор для конференции.
— О, а давай я протестирую твою прогу! — сказал он. — Буду вводить всякие неправильные символы, заставлять программу работать неправильно. Тупо жать на все клавиши подряд. Ну что? По рукам?
— По рукам!

Я согласился, даже не подозревая, что меня ждёт. Передал ему бинарник программмы на флешке и к концу недели получил ответ: вордовский документ на полторы страницы со списком ошибок и поведением программы! Полторы страницы 12-м шрифтом Times New Roman, Карл!!! Я был в шоке! Но времени оставалось мало. Конференция должна состояться в четверг следующей недели, а времени на исправление уже не было.

Конференция проходила в одной из школ города. Помещением для конференции был самый обычный на тот момент кабинет математики или физики: учительский стол с компьютером и проектором и ряды парт. Было несколько секций: программирование, веб-дизайн, мультимедиа (навыки работы с Photoshop и др.). В моей секции всего было три человека и мой проект решили посмотреть первым. Это были самые настоящие 5 минут позора: я представил свой калькулятор, провел в нем несколько операций и один из членов жюри попросил меня ввести буквы вместо цифр. Естественно при попытке получить результат выражения, программа выдавала сообщение об ошибке и экстренно завершалась. Выступление было закончено, я пересел в кресло зрителя за парту и дальше для меня началось самое интересное.

Два других претендента представили (неожиданно) веб-браузеры. Это было очень странно, но после этих презентаций члены жюри сказали, мол, вы же не с нуля написали движок браузера, покажите что-то другое! (Позднее я убедился в том, что в том же самом Borland Delphi 7 браузер является готовым элементом). Ребята показали игры. У одного были пятнашки, а у другого танчики. Прям вот почти как тот самый Battle City, только графика уже получше. Сказать, что я был в шоке от танчиков — не сказать ничего. Жюри тоже были в восторге и первое место получил именно этот проект.

И вот тогда я поставил перед собой цель: на следующей конференции я должен занять первое место. А для этого нужно:
Создать собственную игру!

Часть 2 — Создание первой игры

Несколько дней подряд я был под впечатлением от конференции и идея написать игру у меня всё это время вертелась в голове. Я начал поиски.

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

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

Примерно так выглядели те самые танчики

Примерно так выглядели те самые танчики

Примеры проектов — это, конечно, круто, но это были всего лишь примеры. У меня до сих пор не было идеи, какую игру написать. Мне кажется, я думал около месяца, пока не вспомнил один авиасимулятор, в который играл еще в далеком детстве. В нем был вид от первого лица, полеты были преимущественно над водой и для меня мелкого в тот момент геймплей был всё-таки сложным. «Ну вот же!», — подумал я, — «Идея найдена — буду делать авиасимулятор!». Как говорится, вижу цель — не вижу препятствий.

Игру я решил делать сразу в 2D-графике, потому что посчитал, что изучать 3D пока совсем нет времени. И чтобы не заморачиваться с графикой, я решил сделать еще проще — просто передвигать картинки на экране, такая спрайтовая анимация. Для персонажа игрока это была проекция МиГ-29, вид сзади. Для бота-противника — проекция Су-25, вид спереди. К сожалению, не было картинок снарядов и взрывов, поэтому выкручивался, как мог: для взрывов нарисовал две картинки в Paint (для игрока и бота), а в качестве снарядов два квадрата — для игрока жёлтый, для бота красный. Экран был поделён на две части: снизу земля зеленым фоном, сверху небо — голубым. Ну и собственно главное меню игры:

Главное меню и справка об игре

Главное меню и справка об игре

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

Геймплей игры MiG-29: The First v.1.0

Геймплей игры MiG-29: The First v. 1.0

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

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

Геймплей игры MiG-29: The First v.1.1

Геймплей игры MiG-29: The First v. 1.1

В последнем обновлении органы управления стали привычными: перемещение осуществлялось с помощью клавиатуры клавишами «вверх», «вниз», «вправо», «влево» и огонь на «пробел». Ну и из-за переноса управления на клавиатуру отпала необходимость в отображении клавиш на экране:

Геймплей игры MiG-29: The First v.1.2

Геймплей игры MiG-29: The First v. 1.2

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

Поэтому вскоре я нашёл примеры работы с графическими примитивами в Delphi и около недели изучал, как ими можно оперировать в реальном времени. Как сейчас помню, это был «Кораблик», на котором демонстрировался метод базовой точки.

Кораблик из примера

Кораблик из примера

Всё это нужно было только для одного:
Создания той самой игры, которая даст мне победу в конференции!

© Habrahabr.ru