Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

Элементарный ИИ в стратегиях   Найти похожие ветки 

 
Ricks ©   (2005-10-11 01:34) [0]

Пишу что-то очень похожее на стратегию. Сделал уже ландшафт и передвижение по нему объектов. Возникла такая задача: необходимо сделать искуственный интеллект, не обязательно сложный. Вопрос вот в чем - как должен себя вести, скажем какой-либо боевой объект (желательно указать в виде пунктов)?


 
XProger ©   (2005-10-11 03:32) [1]

Всё зависит от того, какие задачи этот самый AI должен решать...
Включи фантазию! ;)


 
boalse ©   (2005-10-11 08:21) [2]

А как бы ты себя вёл, если бы был фанатичным солдатом армии, в которой служишь?
1. Эвристическая оценка обстановки (Какой дан приказ, какие враги поблизости, как лучше замочить конкретного противника, до какого противника меньше переться, кого проще загасить и т.д. Но юнит при этом анализе должен руководствоваться в первую очередь приказом игрока, приказ может быть, может нет).
2. Принятие решения на основании 1.
3. Попытка выполнить решение.
4. При неудачной попытке выясняем, почему она сорвалась (допустим, натолкнулись на препятснвие), на основе этих выяснений возвращаемся к 1 и далее по кругу.

Включи фантазию! ;)


 
Signate ©   (2005-10-11 09:34) [3]

Не в тему, но все же...
Ricks,  у тебя получилось сделать выделение тайлов мышкой!? Можешь стукнуть мне в аську?


 
Ricks ©   (2005-10-11 13:27) [4]


> boalse
Спасибо, буду включать :)



> Signate

Я выделял не тайлы, а объекты. Получилось! Ошибка была из-за того, что объект на самом деле перекрывался указателем мыши (не cursor, а полигоном с текстурой)!


procedure UpdateCamera;
begin
gluLookAt(ViewPos.x, ViewPos.y, ViewPos.z, TargetPos.x, TargetPos.y, TargetPos.z, 0, 1, 0);
end;

function GetMousePos(x, y : integer):TVector;
var mm : TMatrix4d;
   pm : TMatrix4d;
   vp : TVector4i;
   c  : TVectorD;
   z  : single;
   rY : integer;
begin
UpdateCamera;
glGetIntegerv(GL_VIEWPORT, @vp);
rY:=vp[3] - y - 1;

glGetDoublev(GL_MODELVIEW_MATRIX, @mm);
glGetDoublev(GL_PROJECTION_MATRIX, @pm);
glReadPixels(x, rY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @z);
gluUnProject(x, rY, z, mm, pm, vp, @C.X, @C.Y, @C.Z);

if (c.x < 0) or (c.z < 0)
 then Result:=Vector(-1, -1, -1)
 else Result:=Vector(c.x, c.y, c.z);
end;



Вот так вот и все работает!


 
Ricks ©   (2005-10-11 13:39) [5]

Так, если я правильно понял:
-перебираем все объекты, расстояние до которых меньше или равно области видимости данного объекта + выбрасываем все "свои" объекты
-наверное надо первыми проверять не здания, а боевые объекты
-смотрим, у кого меньше жизни
-атакуем

так?

Это если без команды игрока (с командой должно быть легче)


 
Da Stranger ©   (2005-10-11 15:28) [6]


> -смотрим, у кого меньше жизни

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


 
Lord Zmiy ©   (2005-10-11 15:38) [7]

+ 6 таблица приоритетов целей для каждого юнита это правильно ... просто многиее ии не удовлетворяет этому условию так что вот это я бы взял за основу ...
а вот до кого быстрее бежать у кого меньше жизни


 
Lord Zmiy ©   (2005-10-11 15:39) [8]

еще бы добавил от кого было бы лучше убежать без команды игрока :)


 
Bogdan1024 ©   (2005-10-11 23:16) [9]

"Найми" себе человека, который будет думать что должен делать юнит :)


 
Ricks ©   (2005-10-12 00:12) [10]


> Bogdan1024

Да нет, это не годится. Пишу чисто сам!
Вобщем таблица приоритетов, я так понял должна составлятся по ходу игры, учитывая некоторые свойства противника!?


 
Don Nikola   (2005-10-12 04:52) [11]

Greetings,

я бы посоветовал сделать разбивку аи на несколько уровней:
- стратегия. следит за ресурсами, строениями и целями игры, управляет группами
- группы. основной элемент, управляет юнитами
- юнит. решает только в кого из целей группы стрелять и когда паниковать и смываться на базу или в лес

Если ориентироваться только на юниты, тяжело будет их координировать, imho


 
Da Stranger ©   (2005-10-12 18:27) [12]


> Вобщем таблица приоритетов, я так понял должна составлятся
> по ходу игры, учитывая некоторые свойства противника!?

По ходу игры нужно делать как можно меньше всяких расчётов. Если у тебя 20 пехотинцев могут из автоматов замочить один танк - значит её вообще не надо.
У меня такая таблица сделана в виде коофицентов наносимого ущерба. Эта таблица является свойством каждого юнита. Например,
для  общего случая этот коофицент 1,
для случая автоматчик - танк 0,
для случая чел_с_базукой-танк 2.5 ,
для случая чел_с_базукой - автоматчик 0.5 и т.п.


 
Fosgen   (2005-10-14 15:25) [13]

Никто не пытался смоделировать ИИ на основе иерархического подчинения - ну как в приведенном варианте от Don Nikola, только с более четкими границами передачи приказов и принятия решений?
Например - командующий центр принимает решение о направлении атаки и коэффициенте превосходства над силами противника; командиры частей - принимают решение куда лучше перемещаться именно его части и какую долю общей задачи выполнять (кого прикрывать, кто идет в первой линии и т.д.); командиры позразделений - в зоне и направлении, определенном командирами частей, цели атаки, точки перемещений, цели и радиусы прикрытия; отдельные юниты в подразделении - выбор цели, осуществление атаки, перемещения, отступления и т.д. в соответствии с приказом командипра подразделения.
Таким образом достигается более детальная проработка общей задачи "замочить противника" на каждом уровне, что позволяет опять же на каждом уровне делегирования приказа вносить коррекции по ситуации и создать более гибкую систему реагирования.

Я лично собираюсь в своей игре делать именно так.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
3-1142324067
Ega23
2006-03-14 11:14
2006.05.07
Утилита isql - какие ограничения?


2-1145178040
MZUser
2006-04-16 13:00
2006.05.07
Как запустить EXE файл из памяти?


15-1145050181
dyd
2006-04-15 01:29
2006.05.07
ADO.NET нужно написать программу


15-1144644621
TUser
2006-04-10 08:50
2006.05.07
Все будет хорошо ...


8-1133896428
zxc
2005-12-06 22:13
2006.05.07
шумоподавление





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский