Чёрный Ворон - последний барьер
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\ возможно, это, как всегда, очередной велосипед :)