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

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

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

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

Комментарии (15)


  1. LeshaRB
    20.07.2024 15:18
    +2

    Так что в итоге-то? Обрывается на полуслове


    1. Vanovsky714 Автор
      20.07.2024 15:18

      Что в итоге, будет в следующей статье )


      1. Ikolo92
        20.07.2024 15:18
        +3

        Вы бы анонс тогда оставили) Зашёл в комментарии с тем же вопросом


        1. Vanovsky714 Автор
          20.07.2024 15:18

          Да, мой косяк. Постараюсь поправить, чтобы было понятнее


  1. serafims
    20.07.2024 15:18
    +2

    Один мой одноклассник когда-то "подбросил" мне диск с Delphi 5 и книжкой с примерами, мотивируя это тем,мало ли мне будет интересно это.

    Ну, с тех пор мне стали практически неинтересны игры (кроме Симс, пожалуй), так как было гораздо интереснее заставить компьютер делать что-то так, как надо тебе. Думаю, это серьезно повлияло в итоге на мое развитие дальше (но совмещать школу и ночные исследования очередного пиратского диска с Юноны или ларьков под лейблом "505" с кучей компонентов и новой версией Delphi), и, хотя не ушел в итоге в программисты профессиональные, умение программировать не раз выручало в рабочих вопросах, когда надо было написать какой-то код для решения задачи прикладной, когда даже важно понимать, как работает ОС, какие принципы заложены в софт.

    Так что - спасибо, Коля!


    1. Vanovsky714 Автор
      20.07.2024 15:18
      +1

      О, да) Совмещать школу и свои проекты, связанные с программированием - то ещё удовольствие. В этом был свой особый кайф


  1. obabichev
    20.07.2024 15:18
    +1

    Мой путь в программирование начался с того, что мне в 8 классе школы попалась книга Программирование игр на BASIC (Маниш Сети), и внутри был диск с интерпретатором и примерами кода (последнее было нереальным кладом).

    Изучение книги растянулось на 2 года и до сих пор думаю, что я был бы другим человеком, если бы не эта книга.

    В геймдев, что забавно, я с тех пор даже не совался >_<

    Но тогда это был нереальный опыт, я радовался тому, что могу управлять принтами в терминал и думал, что смогу допилить любую программу под свои хотелки (о как я ошибался...) =)


    1. Vanovsky714 Автор
      20.07.2024 15:18

      Разделяю ваше чувство, когда только немного погрузился в программирование и начинаешь считать, что можешь вообще всё)


  1. rotten-kitten
    20.07.2024 15:18

    Так и хочется спросить, пришёл ли кто программить с натуральным калькулятором?


  1. svkozlov
    20.07.2024 15:18
    +2

    Калькулятор, это база! Как и "привет мир"!


    1. HemulGM
      20.07.2024 15:18
      +1

      Точно, я никогда не делал Hello World, сразу начал с GUI поделок

      Вот мой калькулятор, который, правда, как обычно, перерос в комбайн

      А потом я понял, что писать просто калькулятор не интересно и сделал так

      Ага, я просто вырезал часть среды и сделал, так, чтобы компилировалась dll, а программа выполняла функцию calc из dll


  1. Hemml
    20.07.2024 15:18
    +2

    Ах, эта детская мечта о написании своей игры!

    Примерно на 15 лет раньше я сам, будучи школьником, писал игру. Вместо компьютера у меня был ZX Spectrum, который грузился с магнитофона, а вместо дельфей хардкорный ассемблер ZEUS. Выглядело это так: сначала с кассеты грузится ZEUS, это примерно минуты три, потом с другой кассеты грузится код игры, это еще минуты две. Несколько исправлений в коде, запуск, зависание, ресет, потом снова грузим ZEUS и так много, много раз подряд. Принтера не было, вся моя комната была завалена листками бумаги с записанными на них от руки кусками кода. Адреса, по которым хранились данные, спрайты и пр. я просто держал в памяти. Ох, мне бы сейчас хоть 10% от той памяти школьника! В итоге нервное перенапряжение, я начал отлаживать программу во сне, пугая родителей словами типа "ячейка", "регистры" и "стек", произносимыми глубокой ночью, так что разработку пришлось прекратить :)


    1. Vanovsky714 Автор
      20.07.2024 15:18

      Писать на ассемблере, конечно, то ещё удовольствие...

      Очень жаль, что у вас не получилось реализовать задуманное. А что за идея у вас была?


      1. Hemml
        20.07.2024 15:18
        +1

        Идея, это одна из причин, по которым всё провалилось. То есть, ее, как таковой, не было. Были какие-то сумбурные мысли, которые выразились в бродилке, вид сверху, по карте довольно большого размера -- мне удалось придумать очень компактный способ хранения карты, что было важно при ~42 килобайтах доступной памяти, в которые еще должен был помещаться ZEUS) Каждый раз, когда концепция корректировалась, приходилось сильно править код на ассемблере, что и явилось причиной нервного перенапряжения)


  1. accurate_random
    20.07.2024 15:18
    +1

    Наверное все писали в детстве какие-нибудь симуляторы...кому программирование не безразлично...хотя- уверен, что часть западает больше на задачки пазлового типа, например тетрис. Тетрис отношу к пазловому типу.