Как стать автором
Обновить

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

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров6.4K

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

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

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

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 и около недели изучал, как ими можно оперировать в реальном времени. Как сейчас помню, это был «Кораблик», на котором демонстрировался метод базовой точки.

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

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

Теги:
Хабы:
Всего голосов 19: ↑18 и ↓1+24
Комментарии15

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн