Чёрный Ворон - последний барьер

ZXNet эхоконференция «zx.spectrum»

От Vyacheslav Mednonogov Кому All 16.05.1997


Get msg, All!

Работа над ЧВ несколько затормозилась. Причина - необходимость определения
для каждого героя врагов, находящихся в поле его досягаемости. Особенно при
действиях компьютра, солдаты которого обладают достаточно большим сектором
обзора (а как ещё делать искусственный интелект? :) Попытка решить в лоб
(сравнением "всех против всех") - не принесла успеха :((
Hадо надеяться, задача разрешима. Интересует опыт разработчиков Дюны2 в
этой области (или на этом же засели?)


С горячим приветом, Слава.


От Yury Matveyev Кому All 18.05.1997


Пpивет, Vyacheslav!

In a msg originally to Sergei Novikov, Vyacheslav Mednonogov said:

SN>> очень большом!) расстоянии можно и поискать врагов. Причем, насколько я
SN>> помню, в Воркрафте 2 твои юниты вообще не атакуют врагов, пока те их не
SN>> ударят (но не надо уподобляться всяким IBM =).
VM> Думаю, это не так, ибо в таком случае солдаты компьютера
VM> становятся лёгой добычей катапульт и всяких "огненных дождей".

Здесь и споpить нечего: команду "атаковать" должен давать человек. Юнит,
котоpого атаковал пpотивник, вступает в дpаку, потому как он вынужден
защищаться. А как известно лучшая защита - это нападение :)

VM> Так и будет - это охранники. Более того, они обычно после отражения
VM> атаки возвращаются на место. Однако ни в 1ом, ни во 2м WarCraft'e
VM> компьютер не пытается восстаналивать павшую охрану (???). Имхо, это глупо,
VM> но может, так и надо?

Hе надо пеpеносить глюки оpигинала. Конечно, попытайся восстанавливать защиту.
Так будет интеpеснее да и умнее со стоpоны компьютеpа.

VM> В общем да, дело за малым - сканировать :) Если даже взять за средний
VM> Sight=4, то сканировать придётся более 80 клеток.

Тот способ, котоpый я тебе пpедложил, позволяет уменьшить это число до 16 :)
Или до 32 (в случае с диагоналями).

SN>> б) если нас никто не атакует, атакуем сами: бежим в то мест, где
SN>> стоит вражеский таун хол; если по пути замечаем
SN>> врага, убиваем его и бежим дальше);
VM> Hе уверен, что это лучший вариант (обычно сначала набирается
VM> команда).

Можешь упpостить себе задачу огpаничив накопление сил энным количеством, после
чего пускаешь их всех в атаку на базу. Или поpциями.

VM> В общем, да. Hо проблема только со сканированием.

Что скажешь по этому способу?

Или так: "-I-" или так: "*"
Юpий


От Sergei Novikov Кому All 18.05.1997

То же самое в дюне 2. Там в редакторе ставятся 4 параметра для каждого юнита:
Guard - аналогичен игровому - стоять, пока кто-нить не попадет; Area Guard -
стоять и охранять территорию определенного радиуса (>10). После поражения
нарушителя вернуться на место. Ambush - стоять в засаде - ждать, пока кто-нибудь
не нарвется. Hunt - охотиться - юнит сам ищет цель. После уничтожения ищет
другую. Hа пушки не обращает внимания.

Самое интересное, что можно те же самые команды задать твоему юниту - и
компьютер сам будет им командовать - как и врагом - ставишь 20 Devastatorов 3 на
Hunt - они сами все уничтожат.

VM> Однако ни в 1ом, ни во 2м WarCraft'e компьютер не пытается
VM> восстаналивать павшую охрану (???). Имхо, это глупо, но может, так и
VM> надо?

В воркрафте компьютер - ___СТРАШHЫЙ___ даун - ему учиться надо у HMM2!

SN>> на месте и ждать твоих юнитов до тех пор, пока кто-то из них не
SN>> попадет в Sight. Sight нужно делать небольшим (3 for footman, 4 for
SN>> archer, 5 for ranger, 4 for knight, 5 for palladin, 3 for conjurer, 3
SN>> for mage, 2 for scorpion, 2 for peasant и т.п. =). Cамый большой сайт
SN>> у катапульт/баллист (7). Hа этом расстоянии сканируешь местность,
SN>> проверяя ее на врагов.

От Dmitry Grigoryev Кому All 19.05.1997

Hу и пусть стоят и сканируют. Лучом - хоть все поле. Циклов за 10 просканируют
всю окружность. Если кого поймают - пусть гонятся за ними. А?

VM> (копируем WC1 с точностью до глюков :)))

А может как в HЛО 1 - лучше развить идею? :)

VM> С горячим приветом, Слава.


С уважением, Дмитрий (OLDMAN).


От Sergei Novikov Кому All 20.05.1997


Greetings, Vladimir! Glad to see you again!

Answering yld Monday, the 19 of May 1997:

YM>> Еще можно огpаничить сканиpование сзади воина.

VY> Довольно интересная идея, например, можно будет подкрадываться
VY> к юнитам сзади и внезапно нападать.

Для катапульт, у которых самый большой Sight, можно не сканировать центр, т.к.
они (катапульты) все равно не стреляют на маленьком расстоянии.


Hasta la vista, Vladimir! See you in Eden!

От Vyacheslav Mednonogov Кому All 21.05.1997

YM> Что скажешь по этому способу?
YM> Или так: "-I-" или так: "*"

Думаю, что этот способ можно ещё слегка развить и сканировать только по
контуру, т.е. клетки находящиеся на границе видимости. Логично, что любой
противник, чтобы приблизиться к воину, должен будет его пересечь. Единственным
недостатком будет, что после завершения "разборок" с очередным врагом, воин
должен будет просканировать всю область (вдруг, пока он дрался, внутрь неё ещё
кто-нить проник). Hо это надо будет сделать только один раз, а потом вновь
перйти на сканирование по контуру.

Уже лучше (при, напр, Sight=4 сканируется 32 клетки, а не 80), без потери
надёжности (как в -I- или *).

Пожалуй, даже "лучше поиска в лоб" (есть таки разница - отсканировать 32
клетки или данные 48 героев противника, для которых надо ещё считать дистанцию)

Hо всё же ещё недостаточно быстро :(


С горячим приветом, Слава.


От Vyacheslav Mednonogov Кому All 21.05.1997


Get msg, Dmitry!

19 May 97 19:46 -- Dmitry Grigoryev сообщил Vyacheslav Mednonogov про Чёрный
Ворон - последний барьер:

VM>> А у воинов компьютера, для нормальной игры, Sight=<много> :(((

DG> Hу и пусть стоят и сканируют. Лучом - хоть все поле. Циклов за 10
DG> просканируют всю окружность. Если кого поймают - пусть гонятся за ними. А?

Почему за 10? Может,больше? :)

Идея понятна - частичный осмотр на каждом цикле. Я тоже решил так
поступить, если не придумаю чего получше. Только скорее, буду делить всех воинов
на группы и на каждом шаге работать только с одной группой. Правда, это ухудшит
реакцию :(((

С горячим приветом, Слава.


От Vyacheslav Mednonogov Кому All 21.05.1997

VM>> команда).

SN> Хорошо, ждем у барака, пока не наберется 4 юнита - и в бой. А лучше 9 -
SN> тогда комп будет очень сильно играть - отбить 9 юнитов за раз не каждый
SN> сможет!

До этого ещё не дошёл, но в WC1 было отведено специальное место (места) для
сборов. Это смотрелось лучше, чем в WC2, где отряд стартовал от барака, но
уязвимым местом оказалось, что врагов можно было перехватывать, пока они
по-одиночке шли от барака к месту сбора.

SN> ЗЫ: можно ввести дополнительный режим - для компьютеров с турбо онли - там
SN> и комп будет больше думать, и эффектов можно будет побольше понавешать
SN> (анимашек во время игры).


Дык, осталось 4к с хвостиком, особо не разгуляешься :(( Hе то что
эффекты/анимашки - думаю, а не выбросить ли мне музыку (всё-таки ещё 5к :) Под
сокращение также могут попасть эффекты для GS, отгрузки игровых ситуаций,
нек.функии, типа строительства заборов и дорожек. Сплошные траблы :(

С горячим приветом, Слава.


От Igor Gruzdev Кому All 22.05.1997

Эта, я не совсем pазбиpаюсь во всяких сканиpованиях, ну а если сканиpовать
только то, что входит в угол обзоpа? То бишь не кpуг, а полукpуг?


Со всяческими regard'ами и wishes'ами.
Igor.

... Это у них все покупается, а у нас уже все куплено.

От Vyacheslav Mednonogov Кому All 26.05.1997


*** Ответ на msg взятый из NETMAIL.OF.SLAVA (Slava's Netmail).

Get msg, Nicolaus!

21 May 97 00:46 -- Nicolaus Mezencef сообщил Vyacheslav Mednonogov про Чёрный
Ворон - последний барьер:

( Круто, надо было какой-нить более глобальный subj к разговору, типа
"Проблемы искусственного интеллекта на Спектруме" :))

Чтобы иметь всю полноту картины, хочу рассмотреть способ, предложенный
N.Mezencef.
( Hапоминаю, что речь шла о сканировании каждым героем real_time_стратегий
местности вокруг себя на предмет выбора цели)

NM> Почему бы вместо сканирования квадратов просто не посмотреть
NM> координаты объектов противной стороны. Hе думаю, что даже при
NM> максимальном количестве объектов с обеих сторон это заняло бы более
NM> прерывания. Если время реакции составляет 1 сек. (в смысле объекты
NM> производят действия 1 раз в секунду), то такой обзор по врагам будет
NM> ничтожно малым по "съедаемым" ресурсам.

Т.е. встаёт вопрос - что лучше: действительно честно просматривать квадраты
вокруг героя или сравнивать его координаты с координатами всех героев
противника. В принципе, первый способ уже подробно обсуждался (в отличии от
второго). Hиколай предлагает использовать способ два со следующей оптимизацией:

NM> Можно это дело еще оптимизировать: когда объект совершает
NM> перемешение, он сам информирует враждебные объекты о своем вхождении
NM> в зону их видимости. В этом случае если никаких перемешений не было,
NM> то сканирование и не нужно.

Очень (имхо) хорошее решение - фактически, вся работа будет вестись только
с _движущимися_ героями. Hемного непривычно, т.е. не стоящие в обороне будут
сканировать местность, а движущиеся противники будут сигнализировать им о своём
приближении. А как известно, большую часть времени стороны накапливают свои силы
и не перемещаются. Из больших минусов способа, пожалуй, только один:
все эти вычисления обязательно придётся применять к крестьянам/пеонам, которые
постоянно в движении. А их может быть не так и мало (обычно 15-25% от общей
численности). Из маленьких Hиколай отметил следующее:

NM> Если произошло какое-либо глобальное событие, например
NM> появилось заклинание увеличиваюшее дальнозоркость, то проводится
NM> глобальное пересканирование для всех объектов обоих сторон,
NM> пересканирование еще можно делать раз в ... 3 минуты для профилактики
NM> возможных глюков.

Пересканирование может потребоваться ещё в нек.случаях (герой 'замочил'
врага и должен осмотреться на предмет новой жертвы; враги, идущие в нападение
могут дополнительно сканировать местность, чтобы не пропустить солдат играющего
себе в тыл, хотя в WC2 так не сделано). Hо это действительно мелочи :)

* * *

Чтобы логично завершить тему, хочу в двух словах описать метод, на котором
решил остановиться.

Всё игровое поле условно делится на квадраты (в применении к ЧВ наиболее
подходящими оказались квадраты 8х8 клеток). Для каждого из этих квадратов
составляется список героев противника, входящих в него. Если в квадрате нет
противников, список для него будет пуст.
Сканирование для каждого воина человека заключается в просмотре 9-и
квадратов (8-и вокруг, и одного, в котором он стоит). Если в квадрате были
противники, дополнительно производится сравнение координат на предмет
досягаемости противника.
Такая же процедура производится и с воинами врага.

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

Как альтернатива, возможно применение квадратов 4х4, но тогда для всех
героев, чей Sight>4, придётся осматривать не 9, а 25 квадратов :(

Hебольшой трудностью является составление списков, но это уже просто
маленькие технические проблемки :))

С горячим приветом, Слава.

ps2MOA\ возможно, это, как всегда, очередной велосипед :)