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

Вниз

Ai и GlScene   Найти похожие ветки 

 
Jedi Knight   (2002-10-25 17:03) [0]

Вообще я плохо разбираюсь в вопросах искусственного интеллекта и у меня такой вопрос:
Как сделать, чтобы враг (В моем случае TIE-Fighter,из Star Wars) садился на хвост и проявлял хоть какие нибудь признаки ума (Стрелял, например не постоянно, а только когда впереди него враг, чтобы распознавал своих/чужих и т.д.)

Примечание:
У меня все происходит в космосе, поэтому вопрос о столкновениях бота с землей отпадает, пока.


 
Sapersky_   (2002-10-26 01:07) [1]

Распознавать своих/чужих - элементарно, просто смотрим в массив (или где там хранятся корабли)... для большей реалистичности можно сделать "вероятность распознования", зависящую от расстояния, квалификации пилота и т.д. После выбора цели садимся на хвост... я в своё время делал так: вычисляется вектор, направленный от позиции AI к позиции цели. Проверяется, насколько он соответствует реальному вектору направления AI. Если не соответствует, AI-корабль поворачивает в нужном направлении - до тех пор, пока угол между векторами не будет меньше опр. величины. Когда будет - стреляем. Одновременно проверяется расстояние до цели - если больше радиуса действия оружия, ускоряемся и т.д.
Могу прислать код процедуры, которая всё это делает (Direct3DRM). Довольно кривой, правда :(.


 
sany   (2002-10-26 01:51) [2]

Sapersky_, если несложно, то можешь и мне выслать, я делаю игрушку типа "гонки на выживание" на delphiX (вид сверху), но пока до разработки ИИ я ещё не добрался, а так я пока плохо в этом разбираюль то мне будет очень полезно посмотреть пример. Зарание спосибо. Если можешь то загляни сюда: http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035493503&n=9 может чем поможешь?


 
Jedi Knight   (2002-10-26 18:24) [3]

Прислать - это хорошо, только на чем это написано ?(GlScene, OpenGl, DirectX)


 
Джастер   (2002-10-26 21:32) [4]

Он же сказал Direct3DRM, значит это DirectX


 
Sapersky_   (2002-10-26 23:25) [5]

Вставлю прямо сюда, оно небольшое:

procedure GetAimingInfo(Const ASPos, ASDir, TargetPos : TD3DVector;
Var xPr, yPr, zPr, Dist : Single);

// ASPos, ASDir - позиция и направление AI-корабля
// TargetPos - положение цели
// xPr, yPr, zPr - проекции вектора направления AI
// на оси, построенные по вектору, направленному от AI к цели
// Фактически, коэффициенты, показывающие, на сколько нужно поворачивать:
// xPr - вправо/влево, yPr - вверх/вниз,
// zPr - если <0, то мы летим в противоположную сторону :), и нужно развернуться
// Dist - дистанция до цели

Var axZ,axX,axY : TD3DVector;

function Projection(which,to_ : TD3DVector): Single;
begin
Result:=VectorMagnitude(which)*VectorDotProduct(which,to_);
end;

begin
axZ:=VectorSub(ASPos,TargetPos); // вектор от AI к цели
Dist:=VectorMagnitude(axZ); // дистанция до цели
axZ:=VectorNormalize(axZ);
axX.y:=0; axX.x:=-axZ.z; axX.z:=axZ.x; // горизонтальный перпендикуляр к вектору цели
axY:=VectorCrossProduct(axZ,axX); // вертикальный
axY:=VectorNormalize(axY); axX:=VectorNormalize(axX);
xPr:=Projection(ASDir,axX); // проекции реального вектора направления
yPr:=Projection(ASDir,axY); // на три полученные оси
zPr:=Projection(ASDir,axZ);
end;

По полученным данным выполняется прицеливание, например, вот горизонтальное:

If (xPr>acc) then Ships[ShipNum].Turn(tsRight,ttSpeed,True,xPr/2);
If (xPr<-acc) then Ships[ShipNum].Turn(tsLeft,ttSpeed,True,-xPr/2);

(acc - константа, допустимая точность прицеливания).

Я бы мог привести и всё остальное, но оно тебе вряд ли поможет - там идёт специфика игрушки, описываются If"ами (т.е. криво и непонятно - надо бы таблицы для этого делать) различного рода эмпирические (подобранные тыком) закономерности. Вряд ли разберёшься (я сам сейчас не уверен, что смогу :)). А просто передрать не получится - как я уже писал, это работает под D3DRM.
По поводу векторных операций (VectorCrossProduct и т.д.) - см. заголовки к DX7 или 8, Direct3D.pas.


 
Jedi Knight   (2002-10-29 16:42) [6]

Спасибо.



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

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

Наверх




Память: 0.46 MB
Время: 0.008 c
7-88282
zyurik
2003-02-02 00:55
2003.03.27
Реестр


1-88031
grusty
2003-03-14 09:52
2003.03.27
Смена языка интерфейса в программах.


14-88240
Delirium^.Tremens
2003-03-11 10:16
2003.03.27
Новые приключения DT


14-88180
sjer
2003-03-11 10:28
2003.03.27
диплом


1-88004
Sergei
2003-03-14 09:21
2003.03.27
Вопрос по TLabel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский