Игра «Роботир»
2012

В учебные годы, выполняя интересное для себя задание учителя, мы стремились сделать больше, чем было задано. Так же и в этот раз.
На уроке мы проходили тему вывода графики на Canvas в Delphi, изучая простейшие методы для рисования прямоугольников, эллипсов и линий. Нам показали программу, которая выводила на экран смайлик, и на дом задали изменить её так, чтобы смайлик двигался; в качестве усложнения можно было сделать, чтобы он двигался по какой-нибудь функциональной траектории, например, sin(x). И ещё нам был дан... простор для творчества - этого-то мы и ждали!
Когда речь заходит о творчестве, то обычные смайлики перестают нас устраивать, и мы начинаем задумываться о чём-то большем - так получилось и на этот раз. Ну а думать нам предстояло 3 дня, поэтому, мы спешно взялись за работу.
Идея игры пришла мне в голову ещё днём, во время занятий в институте (во время них часто приходят посторонние идеи). Мне показалось интересным сделать очередную игру со стрельбой по мишеням, только мишень снабдить некоторыми человеческими качествами. Если она бегает, то должна уставать; если в неё стреляют, то должна пугаться, а получая урон - испытывать боль.
Всего было придумано 5 состояний, и персонаж должен был сам, либо, по действиям игрока, переключаться между ними:
- Ожидание. В этом состоянии персонаж гуляет по экрану, время от времени случайно изменяя своё направление и отскакивая от границ экрана.
- Усталость. Переходя в это состояние, персонаж просто останавливается и стоит некоторое время, восстанавливая свои силы. В игре усталость является некоей переменной, постепенно увеличивающейся и замедляющей игрока (Замедление = Усталость% от Скорости). Когда она становится равной 100, то персонаж останавливается.
- Страх. Данное состояние возникает при наведении курсора на цель и пропадает по истечении случайно выбранного промежутка времени. Пугаясь, персонаж ускоряется и начинает беспорядочно бегать по экрану. В общем-то, беспорядочно бегал он и до этого.
- Повреждение. Здесь всё ясно - данное состояние возникает при нажатии на персонажа мышкой.
- Смерть. Объект просто исчезает с экрана и не реагирует ни на какие действия. И это печально.
В качестве главного героя был выбран Pretty Robot, тогда ещё только появившийся на свет (даже руки ещё не выросли) - эту игру можно назвать его первым сольным проектом.

Мы сидели 3 дня безвылазно, уставшие и с больными глазами, но сделали игру такой, какой и запланировали изначально. И даже, несмотря на нехватку времени, смогли реализовать меню с настройками: максимальное количество роботов на экране и максимальное количество патронов.
Редактор
Этот проект - два в одном: игра + графический редактор, написанные всего за 3 дня. Так как мы должны были показать учителю свои знания в области вывода графики средствами Canvas, то ни о каком Photoshop'е речи быть не могло, но мы подошли к задаче исключительно творчески. Рисовать сложную графику при помощи только программного кода (в реальном времени) - такое себе занятие, поэтому, нам предстояло подготовить механизм для автоматизированной генерации этого кода. Идея была проста: механизм сгенерирует код при помощи методов Canvas (что и было нужно по заданию), а дальше игра сохранит сгенерированные картинки в память и для вывода на экран будет использовать уже растровые изображения.
Сам редактор имеет удобный интерфейс для визуального редактирования изображения, которое затем преобразуется в код на языке программы (Delphi).
Получается что-то вроде этого:
Paint(14, 5, 6641750) PenColor(0) Ellipse(4, 9, 62, 65) Ellipse(61, 22, 46, 53) Line(21, 23, 34, 14) Line(33, 15, 43, 11) Line(21, 23, 19, 17) Line(19, 17, 20, 12) BrushColor(7692887) Paint(51, 28, 0) BrushColor(13023667) Paint(62, 26, 0) PenWidth(4) PenColor(8811375) Ellipse(19, 24, 15, 38) Line(12, 24, 16, 19) PenColor(6641750) Ellipse(42, 58, 25, 61)
Редактор сохраняет изображение в виде файла с такими строками, а игра, считывая их, конвертирует код в Canvas-методы, которые последовательно выполняет. Именно в этом месте и было выполнено задание учителя. =)
В конце мы ещё немного доработали игру так, чтобы персонаж двигался нелинейно, время от времени меняя свой маршрут (раньше его можно было поймать, просто поставив курсор мыши по траектории его движения). Ниже можно скачать архивы с самой игрой и её исходниками, а по этой ссылке - посмотреть обсуждение проекта на Форуме программистов. Забыл сказать, что нажатие на кнопку Alt покажет количество здоровья, оставшегося у каждой цели. Почти WarCraft.
Несколько образных рассказов о любви, звездах и потерях, написанных в далеком 2014 году, читаются под настроение.
Они актуальны и сейчас, но из-за образности повествования могут быть понятны не сразу. Это рассказы-эмоции, читать их нужно вдумчиво и внимательно.
Возможно, вы найдете в этих текстах что-нибудь для себя или про себя...