/
romashov.z
/
PPAGame
Обзор
Документация
Войти
/
romashov.z
/
PPAGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Core/Strategies/IFormationStrategy.cs
45 строк
2 KB
Zakhar Romashov
Добавили логику с бафами
29 апр 2026, 13:06
29 апр 2026, 13:06
7623dfb
Код
Авторство
О чём код?
using System.Collections.Generic; namespace ArmyBattleGame { // Паттерн "Стратегия": правила построения и боя для одной формации. // Может быть заменена в любой момент через BattleField.ChangeStrategy. interface IFormationStrategy { // Идентификатор стратегии (для сериализации сохранений). string Name { get; } // Человекочитаемое название. string DisplayName { get; } // Желаемое число колонок в зависимости от размера армии. int ColumnCountFor(int unitCount); // Перестроить армию под формат этой стратегии (после смены стратегии или Compact). void Rebuild(Army army); // Фаза рукопашного боя (модифицирует обе армии). void ExecuteMeleePhase(BattleField field, IBattleLogger logger); // Фаза специальных способностей. void ExecuteSpecialsPhase(BattleField field, IBattleLogger logger); // Может ли юнит на данной позиции применять SA. // Для всех формаций: только если юнит не на передовой своей колонны // (есть живой союзник ближе к противнику в той же колонке). bool CanUseSpecial(Army own, UnitPosition attackerPos); // Враги, до которых юнит может дотянуться SA в указанном радиусе. // Возвращаются в порядке предпочтения цели. IEnumerable<(IUnit unit, UnitPosition pos)> GetEnemyTargets( Army own, Army enemy, UnitPosition attackerPos, int range); // Союзники впереди в радиусе (для лекаря/мага). IEnumerable<(IUnit unit, UnitPosition pos)> GetForwardAllies( Army own, UnitPosition attackerPos, int range); // Разместить клона рядом с магом. Возвращает позицию клона или null, // если поместить не удалось (нет места). UnitPosition? PlaceClone(Army own, UnitPosition wizardPos, IUnit clone); } }