Skip to content

Repository files navigation

Тестовое задание

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

Правила симуляции

  • Карта представляет собой прямоугольную сетку размером W×H клеток.
  • Каждый юнит имеет уникальный целочисленный идентификатор.
  • Один ход соответствует одному действию одного юнита.
  • Юниты действуют в порядке их создания.
  • Некоторые юниты могут перемещаться:
    • за один ход юнит может перейти в любую из 8 соседних клеток, если она свободна;
    • если цель недостижима за один ход, юнит продолжает движение к ней в последующих ходах.
  • Некоторые юниты могут атаковать, уменьшая количество HP у цели:
    • при достижении 0 HP юнит умирает;
    • после смерти юнит больше не действует и освобождает занимаемую клетку.
  • Симуляция завершается, когда не остаётся юнитов, способных совершать действия.

Существующая реализация

При запуске приложение получает путь к файлу со сценарием симуляции. Сценарий содержит команды для создания карты, юнитов и их перемещения.

Прототип содержит реализацию одного игрового юнита — мечника.

Мечник

  • Ближняя атака: атакует случайного юнита в соседней клетке, нанося урон, равный Strength.
  • Способность: с вероятностью Chance / 1000 вместо обычной атаки применяет «Рваные раны», нанося Rending урона.
  • Поведение: если цель для атаки отсутствует, перемещается.

Задача

Спроектировать и реализовать расширяемую архитектуру, затем продемонстрировать ее работу на примере нового юнита.

Охотник

  • Дальняя атака: стреляет в случайного юнита на расстоянии от 2 до Range клеток, нанося урон, равный Agility. Атака возможна только при отсутствии других юнитов в соседних клетках.
  • Ближняя атака: если дальняя атака невозможна, атакует случайного юнита в соседней клетке, нанося урон, равный Strength.
  • Способность: с вероятностью Chance / 1000 вместо обычной дальней атаки применяет отравленные стрелы, нанося в сумме Poison урона за пять ходов. Урон от яда удваивается в тот ход, когда отравленный юнит получает эффект «Рваные раны».
  • Урон от яда засчитывается как урон охотника, наложившего эффект.
  • Поведение: если цель для атаки отсутствует, перемещается.

Формат входных и выходных данных изменять нельзя. Событие атаки должно содержать суммарный урон, который нанес один юнит другому. Все остальное — на ваше усмотрение. Вы можете не сохранять текущий код из папки Game.

Спроектируйте архитектуру, которая позволит легко добавлять новые сущности и механики взаимодействия. Представьте, что над проектом одновременно работают 20 джуниор-разработчиков — каждый добавляет юнитов с уникальными способностями.

Разделите свой код на две папки: Core и Features. В Core — движок симуляции, в Features — реализация конкретных механик мечника и охотника.

Не беспокойтесь о производительности или многопоточности.

Планы

При разработке учитывайте планы по добавлению новых юнитов, действий и характеристик. Эта функциональность не входит в задание — она лишь указывает направление.

Маг

  • Дальняя атака: стреляет в случайного юнита на расстоянии от 2 до Range клеток, нанося урон, равный Spirit.
  • Способность: с вероятностью Chance / 1000 призывает огненную стену из 3 клеток на 5 ходов. Стена не блокирует движение и наносит Firewall урона за ход каждому юниту, находящемуся на ней.
  • Поведение: если цель для атаки отсутствует, перемещается.

Башня

  • Дальняя атака: стреляет в случайного юнита на расстоянии от 2 до Range клеток, нанося урон, равный Power.
  • Поведение: не перемещается, неуязвима, занимает 2×2 клетки.

Ворон

  • Летающий юнит:
    • Не занимает клетку на карте.
    • Может перемещаться на 2 клетки за ход.
    • Не может быть атакован в ближнем бою.
    • Минимальная и максимальная дистанция дальней атаки на ворона снижена на 1.
  • Ближняя атака: атакует случайного юнита в соседней клетке, нанося Strength урона.
  • Поведение: если цель для атаки отсутствует, перемещается.

Требования

  • Система сборки CMake (проект должен содержать файл CMakeLists.txt).
  • Опубликуйте задание в любом публичном Git-репозитории (GitHub, Bitbucket и т. д.).

Примечание: Если какой-то аспект механики не описан в задании, реализуйте его на свое усмотрение.

Если у вас возникнут вопросы при выполнении задания, присылайте их.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages