Skip to content

yudov-maksim/cpp_battle_test_core_architect

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Цель

Цель задания — продемонстрировать навыки проектирования ПО. Не беспокойтесь о производительности, использовании потоков или подключении библиотек. Мы не ожидаем детерминированного результата работы, это усложнило бы задачу. Время выполнения не ограничено, но ожидается, что оно займет не более 6–8 часов.

Что мы хотим увидеть:

  1. Простой, аккуратный код, по которому легко понять, как он работает.
  2. Четкие зоны ответственности каждой сущности в проекте.
  3. Архитектуру, позволяющую легко добавлять новые сущности и механики взаимодействия.
    • Представьте, что после вас придут 10 джуниор-разработчиков, которые будут одновременно добавлять новые фичи.

Задача

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

Можно создать карту размером W×H клеток и разместить на ней N юнитов.

  • Юниты могут быть разного типа с разными действиями и характеристиками.
  • Каждый юнит может выполнить одно действие за ход.
    • Юниты действуют в порядке их создания.
  • Одну клетку может занимать только один юнит.
  • У всех юнитов есть уникальный идентификатор Id (целое число)
  • У большинства юнитов есть характеристика HP (Health Points).
    • Если HP ≤ 0, юнит исчезает на следующий ход и больше не действует.
  • Некоторые юниты могут перемещаться:
    • За ход могут переместиться в любую из восьми соседних клеток.
    • Если не могут достичь цели за один ход, продолжают двигаться к ней в следующих ходах.

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

Задание для архитектора

Перед началом разработки подготовьте архитектурное описание проекта

  • DESIGN.md или любой другой формат

    • Одним документом опишите:
      • модули/подсистемы и их ответственность;
      • применяемые паттерны проектирования;
      • как будет расширяться функциональность;
      • порядок обработки команд/событий за ход;
      • аргументацию выбранных решений.
  • Диаграмма (UML, Mermaid, PlantUML — любая)

    • На диаграмме отразите:
      • модули/подсистемы и их ответственность;
      • классы и их ответственность;
      • связи между классами;
      • паттерны проектирования
    • Вынесите в отдельные файлы /docs/architecture_diagram_*.*.
  • Требования к архитектурному описанию

    • Разработчик уровня как минимум junior может взять это описание и реализовать по нему задачу
  • Порядок сдачи

    • Сначала отправьте архитектурное описание на ревью.
    • После апрува приступайте к полной реализации симуляции.

Юниты:

Мечник

  • Характеристики: HP, Strength
  • Ближний бой: Бьет одного случайного юнита в соседней клетке, нанося ему Strength единиц урона.
  • Если некого бить, перемещается.

Охотник

  • Характеристики: HP, Agility, Strength, Range
  • Дальний бой: Стреляет в случайного юнита на расстоянии от 2 до Range клеток, нанося ему Agility единиц урона. Может стрелять только если в соседних клетках нет других юнитов.
  • Ближний бой: Если стрелять не может, бьет одного случайного юнита в соседней клетке, нанося ему Strength единиц урона.
  • Если некого бить, перемещается.

Приложение

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

Так как на карте нет препятствий, сложные алгоритмы поиска пути не требуются.

Команды

  • CREATE_MAP W H — Создает карту размером W×H. Эта команда начинает любой сценарий.
  • SPAWN_SWORDSMAN I X Y H S — Создает мечника с идентификатором I в точке X,Y с характеристиками здоровья H и силы S.
  • SPAWN_HUNTER I X Y H A S R — Создает охотника с идентификатором I в точке X,Y с характеристиками здоровья H, ловкости A, силы S и дальности R.
  • MARCH I X Y — Приказывает юниту I переместиться в точку X,Y.

События

  • MAP_CREATED — Создание карты.
  • MARCH_STARTED, MARCH_ENDED — Начало и конец перемещения юнита.
  • UNIT_SPAWNED, UNIT_DIED — Создание и смерть юнита.
  • UNIT_MOVED — Перемещение юнита на клетку.
  • UNIT_ATTACKED — Атака одного юнита на другого.

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

Пример сценария находится в файле commands_example.txt. Пример лога событий находится в файле main.cpp.

Планы

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

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

Башня

  • Характеристики: HP, Power
  • Дальний бой: Стреляет в случайного юнита на расстоянии от 2 до 5 клеток, нанося ему Power единиц урона.
  • Не может перемещаться.

Лекарь

  • Характеристики: HP, Spirit
  • Лечение: Восстанавливает Spirit единиц здоровья одному случайному юниту в радиусе 2 клеток.
  • Если некого лечить, перемещается.

Ворон

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

Мина

  • Характеристики: Power
  • Если в радиусе 2х клеток есть юнит - взрывается в следующем ходу, нанося всем юнитам в радиусе 3х клеток Power единиц урона.
  • После взрыва исчезает.
  • Не может перемещаться.
  • Не может быть атакована.
  • Не занимает клетку на карте.

Технические требования

  • ОС: Ubuntu
  • Компилятор: clang 15+
  • Стандарт: C++17 или новее
  • Система сборки: cmake (в проекте должен быть CMakeLists.txt)
  • Задание необходимо опубликовать в любом публичном гит-репозитории (GitHub, Bitbucket и т.д.).

В процессе выполнения задания вы можете присылать любые вопросы.

About

Тестовое задание для Scorewarrior

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors