# Бой, оборонительный огонь и обстрел

## Обычный бой

В [Fight](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/MapUnit_Actions.cs) рассчитываются эффективные атака A и защита D с модификаторами. Вероятность успеха атакующего в одном раунде равна `A / (A + D)`. Каждый успешный раунд снимает один HP с проигравшей стороны. Затем проверяются смерть, отступление и повышение опыта.

Это вероятность раунда, не всей битвы. Общий шанс победы зависит от здоровья, отступления и предварительного оборонительного огня. Делать UI-подсказку «шанс победы = A/(A+D)» было бы ошибкой.

[ListStrengthBonusesVersus](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/MapUnit.cs) учитывает укрепление, местность, улучшения, город и пересечение реки. Выбор защитника сравнивает эффективную защиту, умноженную на оставшиеся HP, с учётом враждебности. Это эвристика реализации, не доказательство полного алгоритма выбора Civ3.

## Оборонительный обстрел и отступление

Перед раундами выбирается подходящий бомбардирующий защитник на клетке. Он имеет ограничение оставшихся оборонительных выстрелов; против атакующего с 1 HP такой выстрел не запускается.

Отступление проверяется перед смертельным ударом с учётом возможностей и опыта юнита. Для защитника город исключает этот путь; поиск клетки отступления ограничен выбранным направлением. В коде прямо оставлена ссылка на [недоработку #274](https://github.com/C7-Game/OpenCiv3/issues/274).

## Активный обстрел

[C7Engine/C7GameData/MapUnit_Bombard.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/MapUnit_Bombard.cs) проверяет дальность, силу, допустимые цели и locked peace. При выполнении приоритет таков: стены, вражеский юнит, город, улучшение клетки.

По юнитам число попыток определяется rate of fire. Несмертельный обстрел останавливается на 1 HP; отдельно заданы смертельность по суше и морю. Выстрел расходует движение, но не перемещает атакующего на цель. В городах возможны потери населения или здания; улучшение может быть уничтожено либо понижено.

## Где реализация приблизительна

В комментариях обстрела прямо отмечены предположения: защита стен **8**, здания **16**, населения **12**, улучшения **3**; выбор между зданием и населением — **0.5**. Значения не следует выдавать за проверенные формулы оригинала. Ядерный удар и полный набор авиационных миссий наличием обычного обстрела не подтверждены.

## Для нашей игры

Разделить расчёт боя и воспроизведение анимации; сохранять протокол бросков и причин бонусов. Наше текущее сражение нельзя незаметно заменить этим балансом: у нашего прототипа другие HP и характеристики.

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

