Входной файл: | input.txt | Ограничение времени: | 1 сек | |
Выходной файл: | output.txt | Ограничение памяти: | 256 Мб | |
Максимальный балл: | 100 |
Вы участвуете в разработке игры в виртуальной реальности жанра Tower Defense. В играх подобного жанра, целью является защита основного замка от наступления вражеских юнитов.
Одно из защитных орудий в игре — мортира. Это пушка которая может регулировать угол наклона в пределах от 45 до 90 градусов от земли. Сама себе пушка урон нанести не может.
Как разработчику, вам поручили задание разработать искусственный интеллект для этого орудия. На начальных уровнях искусственный интеллект должен быть достаточно прост, вплоть до того, что он ничего не должен знать о параметрах орудия. Орудие имеет ограниченное количество боеприпасов — 20 зарядов. До того как боезапас иссякнет, пушка должна поразить хотя бы одну цель. Все, что может узнать ваш ИИ — это расстояние, на котором находится цель, и расстояние, на которое улетел снаряд после выстрела. Искусственный интеллект может управлять лишь углом наклона орудия.
Ваши коллеги уже создали для вас простую тестовую сцену, и даже написали за вас API.
Вам лишь необходимо реализовать интерфейс.
Ссылка на репозиторий с проектом:
https://github.com/Lukaviy/AI-for-defense.git
.
Также, ваши коллеги еще не до конца уверены в выборе игрового движка.
Возможно в скором будущем они перейдут на другой.
Поэтому они убедительно просят вас воздержаться от использования функций,
зависимых от Unity.
(Вместо Mathf
использовать System.Math
, и т.д.)
Необходимо реализовать класс CannonAI
со следующим интерфейсом:
public class CannonAI : ICannonAI
{
// Расстояние на котором находится цель
void SetTarget(double distance);
// Угол наклона в градусах в который нужно установить пушку перед выстрелом
double GetShootAngle();
// Информация о дальности полета снаряда
void FeedbackHitDistance(double distance);
}
Файл с решением должен содержать только реализацию класса CannonAI
.
В качестве среды программирования необходимо выбирать C#
.
Гарантируется, что пушка всегда может достать до противника.
45 ≤ Angle ≤ 90
10 ≤ Distance ≤ 106