Простая 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 - всякие инструменты для дебага, чисто информативные
Если не будет лень, то добавлю сюда ссылки.