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

Теги: Программирование, Игры, Delphi
История:

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

На уроке мы проходили тему вывода графики на Canvas в Delphi, изучая простейшие методы для рисования прямоугольников, эллипсов и линий. Нам показали программу, которая выводила на экран смайлик, и на дом задали изменить ее так, чтобы смайлик двигался; в качестве усложнения можно было сделать, чтобы он двигался по какой-нибудь функциональной траектории, например, sin(x). И еще нам был дан... простор для творчества - этого-то мы и ждали!

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

Идея игры пришла мне в голову еще днем, во время занятий в институте (во время них часто приходят посторонние идеи). Мне показалось интересным сделать очередную игру со стрельбой по мишеням, только мишень снабдить некоторыми человеческими качествами. Если она бегает, то должна уставать; если в нее стреляют, то должна пугаться, а, получая урон - испытывать боль.

Всего было придумано 5 состояний, и персонаж должен был либо сам, либо, по действиям игрока, переключаться между ними:

  • Ожидание. В этом состоянии персонаж гуляет по экрану, время от времени случайно изменяя свое направление и отскакивая от границ экрана.
  • Усталость. Переходя в это состояние, персонаж просто останавливается и стоит некоторое время, восстанавливая свои силы. В игре усталость является некоей переменной, постепенно увеличивающейся и замедляющей игрока (Замедление = Усталость% от Скорости). Когда она становится равной 100, то персонаж останавливается.
  • Страх. Данное состояние возникает при наведении мышки на цель и пропадает по истечении случайно выбранного времени после этого. Пугаясь, персонаж ускоряется и начинает беспорядочно бегать по экрану. В общем-то, беспорядочно бегал он и до этого.
  • Повреждение. Здесь все ясно - данное состояние возникает при нажатии на персонажа мышкой.
  • Смерть. Объект просто исчезает с экрана и не реагирует ни на какие действия. И это печально.

В качестве главного героя был выбран Pretty Robot, тогда еще только появившийся на свет (даже руки еще не выросли) - эту игру можно назвать его первым сольным проектом.

Эмоции персонажа

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

Редактор

Этот проект - два в одном: игра + графический редактор, написанные всего за 3 дня. Так как мы должны были показать учителю свои знания в области вывода графики средствами Canvas, то ни о каком Photoshop'е речи быть не могло, но мы подошли к задаче исключительно творчески. Рисовать сложную графику при помощи только программного кода - такое себе занятие, поэтому, нам предстояло подготовить механизм для автоматизированной генерации этого кода. Идея была проста: механизм сгенерирует код при помощи методов Canvas (что и было нужно по заданию), а дальше игра сохранит сгенерированные картинки в память и для вывода на экран будет использовать уже растровые изображения.

Сам редактор имеет удобный интерфейс для визуального редактирования изображения, которое затем преобразуется в код на языке программы.

Получается что-то вроде этого:

Код на языке RoboTir:
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.

robotir_game.zip (533kb) Простая игра RoboTir (попади по мишени) от команды Perfect Light.
robotir_source.zip (215kb) Исходный код игры на языке Pascal (Delphi 7).
Авторы: SpectreZ, SaiLight Работа над проектом: 2012 год

Связанные проекты

+
Фильтрация по тегам
Выбранные теги отобразятся в этой области...
Найти
Программирование 37, Игры 16, Программы 12, Delphi 28, Библиотеки 15, Карты для Warcraft 1 Веб-разработка 23, Сайты под ключ 7, Дизайн 22, JavaScript 5, PHP 0, Laravel 0, Joomla 2 Графика 31, Обработка фото 6, Логотипы 2, Иллюстрации 9, Рисунки 4, Печатная продукция 1, Стикеры 2 Видео 12, Трейлеры 2, Анимация 3 Миры 1, Музыка 6, Персонажи 9, Статьи 7, Литература 5, Рассказы 4, Стихи 1, 2D 6, 3D 23, На заказ 12, Другое 1
Используйте среднюю кнопку для быстрого фильтра по тегу...
Календарь проектов
2008 3 , 2009 6 , 2010 7 , 2011 2 , 2012 3 , 2013 6 , 2014 4 , 2015 11 , 2016 6 , 2017 8 , 2018 2 , 2019 5 , 2020 1