Хоть уже и не совсем новичок,но всё-же,а какой логикой руководствуется ии,когда разрушает города и вообще,какой в этом смысл?Читал тута где-то статью,о скрытых мотивах лидеров,дык выходит,что информация не правдоподобна,поскольку видел и как Хубилай разрушает города и Хатшепсут,(даже два порушила)не говоря уш о Людовике 14-том.Версия игры 1.61,оригинал.
<div class='quotetop'>Цитата(Lexad * 7.10.2007, 15:12) [snapback]206956[/snapback]</div><div class='quotetop'>ЦитатаДолжны быть меньше 5 человек и без чуд. Кроме того, если менее 4 городов, оставит себе.какой логикой руководствуется ии,когда разрушает города [/b]
[/b][/quote]
И более 5 рушит. Видел и 12 и 15... Если рядом мощный культ.центр и дальнейшая война нецелесообразна или не возможна (противник может отбить город).
Знаю, подло завелось теперь на земле нашей; думают только, чтобы при них были хлебные стоги, скирды да конные табуны их, да были бы целы в погребах запечатанные меды их. Перенимают черт знает какие бусурманские обычаи; гнушаются языком своим; свой с своим не хочет говорить; свой своего продает, как продают бездушную тварь на торговом рынке. Милость чужого короля, да и не короля, а паскудная милость польского магната, который желтым чеботом своим бьет их в морду, дороже для них всякого братства. Но у последнего подлюки, каков он ни есть, хоть весь извалялся он в саже и в поклонничестве, есть и у того, братцы, крупица русского чувства. И проснется оно когда-нибудь, и ударится он, горемычный, об полы руками, схватит себя за голову...
Н.В. Гоголь, "Тарас Бульба"
А что за доп. условия?То есть иногда в принципе и случайно может ЛЮБОЙ город(в том числе и святой)разрушить?Ещё интересно,а есть у кого-нить объективная информация на тему поведения разнообразных цив в обращении с покорёнными городами?(думаю,что старая не очень-то объективна)
Расшифровал алгоритм.
Разрушать город AI будет если:
(а)прошло 20 ходов и (б)городов у AI более 4 и (в)город не святой и (г)в городе нет чудес (неустаревших).
Вероятность разрушения (ВР) будет рассчитана по сл. образом:
1.
Если город отобран не у варваров
1.1. Усли вокруг города в есть более 3 городов врага (на каком-то расстоянии) ВР += 30
1.2. Если не 1.1. то при расстоянии от ближайшего своего города > 12, ВР += расстояние * 2.
(условное расстояние, как считается, здесь не написано)
2.
Если (а)город имеет общие клетки с другими AI-городами и (б)финансовые проблемы,
ВР += (70 - 15 * население города)
3.
В городе есть гос.религия:
3.1. Если AI обладает святым городом, ВР -= 50.
3.2. Иначе ВР -= 10
4.
Близость (чего? AI_playerCloseness)
4.1. Если близость положительная, ВР -= (25 + близость * 2)
4.1. При отрицательной близости, ВР += 60
5.
Если (а)город имеет общие клетки с сдругими Ai-городами и (б) отоборан не у варваров
ВР += getRazeCityProb (вероятность разрушения городов для данного лидера)
6.
Если полученное в пунктах 1-5 ВР положительное, то его умножают на содержание по каждому цивику
формула множителя: (100 - getUpkeepModifier)
выполняется для цивиков с содержанием.
(отрицательную ВР не умножают!)
7. И, наконец, принятие решения о разрушении на основе рандома:
Если рандомное число в диапазоне 0-100 меньше ВР, то город - рушить!
(рандом, по-видимому, для разрушения городов ведется отдельный, и возможно, не повлияют при перезагрузке какие-то другие
манипуляции (ходы или сделки) на вероятность разрушения).
Примечания:
(-= означает уменьшить, += означает увеличить)
(в фразе "общие клетки" не уверен, может быть это "примыкает к")
(шаги 1-6 выполняются последовательно и ВР суммируется)
<div class='quotetop'>Цитата</div>Судя по всему это близость компьютера к границам игрока имеется в виду.(closeness-близость)Вообще,большое вам спасибо за проделанную работу,ещё ни на одном сайте не припомню,чтоб получал столь быструю помощь.Близость (чего? AI_playerCloseness) [/b]Теперича бы переложить бы сие на простой язык,стало бы совсем здорово.По таблице:но ребята,я ведь сам видел как Бисмарк два города порушил,тоже и про некоторых других,у кого вероятность нулевая,те же китайцы.
<div class='quotetop'>Цитата</div>Да нет, это скорее близость захваченного города к границам AI-игрока.Судя по всему это близость компьютера к границам игрока имеется в виду[/b]
<div class='quotetop'>Цитата</div>Тьфу тыПо таблице:но ребята,я ведь сам видел как Бисмарк два города порушил,тоже и про некоторых других,у кого вероятность нулевая,те же китайцы.[/b], написано же "дополнительная" вероятность. Выше приведена формула и ее расшифровка - посмотри еще раз. Есть общая вероятность разрушения города, которая считается независимо от конкретного лидера, а есть дополнительный показатель, который повышает вероятность разрушения города конкретным лидером.
<div class='quotetop'>Цитата(Worobjoff * 8.10.2007, 15:08) [snapback]207165[/snapback]</div>stepDistance - это по мому движение юнита за один шаг (с учетом дорог).Интегральная оценка густоты городов вообще (на вскидку).
Что бы точно разобрать формулу расчета, надо еще несколько функций:
stepDistance, calculatePathDistance, area->getNumCities
Но надо ли?
[/b]
calculatePathDistance - эта функция используется для прокладки пути АИ юнита от тайла до тайла (ее использует функция - generatePath)
area->getNumCities - тут по мому все ясно - кол-во городов на континенте...
Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
http://blacksun.civfanatics.ru
-------------------------------------------------
MTDG2 - [civ]christianity[/civ]Монархия
---------------------------------
Председатель CFR Awards 2007
---------------------------------
Председатель CFR Awards 2008
<div class='quotetop'>Цитата(Blacksun * 8.10.2007, 15:31) [snapback]207172[/snapback]</div>Вряд ли. getNumCities - этот метод класса area. Класс area - поле класса CvCity.area->getNumCities - тут по мому все ясно - кол-во городов на континенте...
[/b]
Т.е. getNumCities вычисляет число городов относящихся к этому городу.
Не очень понятно что именно, правда?
<div class='quotetop'>Цитата(Worobjoff * 8.10.2007, 15:45) [snapback]207177[/snapback]</div><div class='quotetop'>Цитата(Blacksun * 8.10.2007, 15:31) [snapback]207172[/snapback]Вряд ли. getNumCities - этот метод класса area. Класс area - поле класса CvCity.area->getNumCities - тут по мому все ясно - кол-во городов на континенте...
[/b]
Т.е. getNumCities вычисляет число городов относящихся к этому городу.
Не очень понятно что именно, правда?
[/b][/quote]
Ты немножко неправильно понял класс Area - это отдельный класс и генерируется он в самом начале (после генерации карты). Это не что иное, как попытка разграничить континенты и острова... (чтобы юниты через море не бегали). А в класс City - он попадает после постройки города (вернее ID Area).
Так что Area->getNumCities() - это количество городов на континенте.
З.Ы. Класс Area - относится скорее к тайлу а не к городу.
Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
http://blacksun.civfanatics.ru
-------------------------------------------------
MTDG2 - [civ]christianity[/civ]Монархия
---------------------------------
Председатель CFR Awards 2007
---------------------------------
Председатель CFR Awards 2008
<div class='quotetop'>Цитата(Worobjoff * 8.10.2007, 16:10) [snapback]207185[/snapback]</div>Ну, не знаю, по моему папка CvGameCoreDLL - сейчас есть везде и в ваниле и в Варлордах и в БТС (для всех разные).Не разбирался с этим никогда. Кусочек программного кода из цивилизации увидел сегодня впервые.
[/b]
Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
http://blacksun.civfanatics.ru
-------------------------------------------------
MTDG2 - [civ]christianity[/civ]Монархия
---------------------------------
Председатель CFR Awards 2007
---------------------------------
Председатель CFR Awards 2008
<div class='quotetop'>Цитата(NeverMind * 8.10.2007, 16:53) [snapback]207197[/snapback]</div>А что тут голову ломать-то?Ээ...это все, конечно, замечательно, но что мы можем из этого выжать для интересущего нас игрового вопроса?
[/b]
Компы любит уничтожать города если экономика стагнирует, если захваченный город может убежать или слишком тесно или далеко расположен.
Не любят уничтожать если там есть религия.
Не будет уничтожать в начале игры или если это святой город или с чудами.
Тупой алгоритм - не учитывает перспективы наступательной кампании, географию (зачем ему город в пустыне или в тундре? А зачем рушить город на очень нужном ресурсе? Особенно если свой воткнуть туда ни культура ни запас войск не позволит), геометрию... Геометрия вообще - самая большая тупость AI. Город может быть нужен для получения дороги к другим цивам. Или к морю. Об этом AI напрочь думать отказывается. Тем более выбирать нужный город для захвата с учетом геометрии.
Не учитывает алгоритм и перспктивы перенести свою столицу. Похоже AI никогда не пытается выбраться из клоаки в которой стартует - из вечных льдов или тупика.