Расчет голосов для диплопобеды:
fCityStatesToCount = количество живых ГГ + половина суммы мертвых ГГ, которых еще можно оживить;
fCivsToCount = количество живых игроков + половина суммы мертвых игроков;
CivVotesPortion = 1.443 * ln(fCivsToCount) + 7.000;
if CivVotesPortion < 0.0 then CivVotesPortion = 0.0;
CityStateVotesPortion = 16.023 * ln(fCityStatesToCount) - 13.758;
if CityStateVotesPortion < 0.0 then CityStateVotesPortion = 0.0;
iVotesToWin = (int)floor(CivVotesPortion + CityStateVotesPortion); // Округление вниз
Далее идет коррекция голосов при голосовании на Лидера:
(iVotesPerCiv = 4, iVotesForHost = 2, iVotesPerCityState = 2)
iVotesToWin = MAX(iVotesForHost + iVotesPerCiv + 1, iVotesToWin); // iVotesToWin >= 7
iVotesToWin = MIN(iVotesForHost + (iVotesPerCiv * (int)fCivsToCount) + (iVotesPerCityState * (int)fCityStatesToCount), iVotesToWin);
Как бы мы не убивали и захватывали, меньше 7 голосов не будет.
Проверка:
Для 6 Игроков и 4 ГГ iVotesToWin = 18;
Для 6 Игроков и 3 ГГ iVotesToWin = 13; (ГГ присоединен Венецией)
Для 6 Игроков и 2 ГГ iVotesToWin = 9; (2 ГГ присоединены Венецией)
Для 2 Игроков и 3 ГГ iVotesToWin = 12; (ГГ присоединен Венецией, 4 Игрока вынесены)
Для 2 Игроков и 2 ГГ iVotesToWin = 9; (2 ГГ присоединены Венецией, 4 Игрока вынесены)
P.S. Добавил значения корректирующих констант.






Ответить с цитированием