Описание

Простая RTS, сделанная с использованием C++, RayLib, RayGui, siv::PerlinNoise и утащенной реализации перцептрона.

Из-за неиспользования игровых фреймворков и несколько неадекватного хранения указателей на юниты, может спонтанно вылетать, а регулярный пересчёт карт векторов вызывает задержки.

Каталоги

game - код игры

docs - документы: сопроводительная записка, презентация и прочее что нужно было для защиты диплома

raygui-master - код библиотеки кнопочек для интерфейса

raylib-master - код библиотеки для графики и мат. функций рассчета логики

Правила

Задача игрока - уничтожить главный улей Жучар. Улей регулярно плодит ульи поменьше, которые создают для Жучар Слизь. Создание новых ульев происходит на незанятых другими ульями местах. Занятое место обозначается темно-фиолетовой Слизью, которая дает еду в зависимости от занятой площади и ускоряет передвижение Жучар по ней.

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

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

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

Турели можно строить только на покрытии вокруг ядер.

Игрок может строить три типа турелей:

  • огнемет - бьет по площади, часто и немного;
  • тяжелая лазерная турель - бьет редко, но сильно;
  • зенитка ПВО - единственная, которая может подбивать воздушных юнитов противника.

Механика

  • Генератор ландшфта: основан на шуме Перлина.
  • Поиск пути: жуки направляются из Улья к Базе, используя карты векторов, созданных по методу Flow Field (взял его отсюда: https://www.youtube.com/watch?v=Bspb9g9nTto). Жучары будут стараться обходить места, где их было убито много, и попадать в те места, где они смогли нанести много ущерба. Для каждого типа жуков своя "карта урона".
  • Туман войны: действует и для игрока, и для жуков, которым приходится разведывать путь к Базе игрока.
  • Физика: юниты отталкиваются друг от друга и физически представлены в игре "кружками", определяемые координатами центра и радиусом (принцип утащен из StarCraft 2). Юниты двигаются, умножая вектор направления (берется из карты заранее просчитанных векторов) на свою скорость и модификатор местности (в воде медленнее, например).
  • Перцептрон: по задумке, должен распределять еду Улья на создание разных типов Жучар в зависимости от их боевой эффективности и соотношения типов турелей игрока, но насколько хорошо он это делает пока не понятно. Возможно, слишком малая выборка данных, стоит подумать на счет сохранения её от игры к игре, или даже создания ИИ чтобы тот играл вместо игрока, нарабатывая опыт наравне с ИИ Жучар.

Управление

  • WASD и мышь - перемещение камеры
  • Пробел - поставить/убрать игру на паузу
  • ПКМ - убрать текущий выбор приказа на строительство
  • B - выбрать Базу для установки
  • Q - выбрать Ядро для приказа построить
  • R - убить юнита в указанной клетке (убивается первый попавшийся)
  • 1-3 - выбрать, какую турель построить (легкая, тяжелая и пво соответственно)
  • 4-6 - заспавнить юнита врага
  • V - открыть всю карту за текущую сторону
  • C - очистка карты (убить всех юнитов, сбросить ресурсы и веса перцептрона)
  • Y - принудительно пересчитать веса перцептрона
  • U - принудительно приказать врагу заспавнить юнитов на всю Еду
  • H - включить/выключить создание юнитов базой врага (по идее надо по умолчанию включить...)
  • F1-F7 - всякие инструменты для дебага, чисто информативные

Ссылки на использованные материалы

Если не будет лень, то добавлю сюда ссылки.