Обновлено:

На этой странице

Ход партии и условия победы

Фактическая последовательность

В AdvanceTurn сначала выполняется фаза действий игроков: человек, затем обычные AI, затем варвары. Уже сыгравшие и побеждённые игроки пропускаются; имеются отдельные условия первого хода. При достижении управляемого UI игрока отправляется MsgStartTurn, и выполнение возвращается интерфейсу.

После окончания действий всех игроков:

  1. Очищается очередь отложенных юнитов и создаются варвары.
  2. Увеличивается номер хода.
  3. Для каждого игрока обрабатываются бонусные юниты, штрафы недовольства, настроение и коррупция.
  4. Рассчитываются финансы и наука.
  5. Обновляются города и история.
  6. Проверяется победа; подготавливаются юниты и флаги следующего хода.

Рабочие вносят прогресс в OnEndTurn своего владельца. В Player.HandleCityUpdates порядок внутри города: культура и границы, рост, производство. Источник: C7Engine/C7GameData/Player.cs.

Почему порядок — правило игры

Содержание начисляется до производства: только что построенный юнит не создаёт неожиданный расход в уже закончившемся ходе. Настроение рассчитывается до роста: у игрока появляется время отреагировать на нового недовольного жителя. Границы расширяются до назначения нового горожанина на клетку.

Восстановление save не должно заново сбрасывать hasPlayedThisTurn: иначе часть сторон получает повторный ход. Код прямо поясняет это разделение.

Какие победы подключены

В ConvertVictoryConditions создаются обработчики доминирования и завоевания при соответствующих переключателях, а также очков и лимита времени. Доминирование использует жёстко заданные 66% площади и 66% населения. Это значения этой реализации, не извлечённые параметры всех сценариев.

ConquestVictory проверяет отсутствие живых соперников. TimeLimitVictory — достижение лимита. ScoreVictory.HasVictory всегда возвращает false: очки нужны для показа и разрешения совпадений. При нескольких победителях выбирается игрок с наибольшим последним историческим счётом.

Источники: C7Engine/C7GameData/Victory/ConquestVictory.cs, C7Engine/C7GameData/Victory/DominationVictory.cs, C7Engine/C7GameData/Victory/ScoreVictory.cs, C7Engine/C7GameData/Victory/TimeLimitVictory.cs.

Пределы и применение

Поля культурной, космической и дипломатической побед есть в C7Engine/C7GameData/Victory/VictoryConditions.cs, но они не создают обработчики в изученном пути. Нельзя считать их работающими по одному переключателю.

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