Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Про игрушку

1.9K
02 декабря 2004 года
Redneck
29 / / 05.04.2003
Я решил сделать игрушку типа старого Wolfenstein'а с помощью Delphi и OpenGL. И нужно мне вот что: как там был устроен AI фрицев ?
Подскажите, пожалуйста.
301
02 декабря 2004 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by Redneck
Я решил сделать игрушку типа старого Wolfenstein'а с помощью Delphi и OpenGL. И нужно мне вот что: как там был устроен AI фрицев ?
Подскажите, пожалуйста.


Можно разбить карту на квадраты и используя волновой метод поиска путь направлять врагов к игроку. Пусть, скажем, враг начинает погоню, когда до пользователя 50 шагов (квадратов пути), а останавливается за 10 или при прямой видимости. Стреляет тоже, в случае прямой видимости.
Вот самый простой вариант ИИ.=)

1.9K
03 декабря 2004 года
Redneck
29 / / 05.04.2003
Это, конечно, хорошо, мне пригодится, но хотелось бы поподробнее: к примеру, что это за волновой метод? Или еще: как определить, видит ли враг игрока ?
301
03 декабря 2004 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by Redneck
Это, конечно, хорошо, мне пригодится, но хотелось бы поподробнее: к примеру, что это за волновой метод? Или еще: как определить, видит ли враг игрока ?


Код:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<dos.h>

unsigned char wv[10][10],lb[10][11]={
"XXXXXXXXXX",
"X....X.X.X",
"X.XX.X...X",
"X.X?.X.XXX",
"X.XXXX.X.X",
"X...X..X.X",
"X.X.X..X.X",
"X.X......X",
"X.X.XX.X!X",
"XXXXXXXXXX"};

void Out(int w,int h)
{
 gotoxy(w,h);
 for(int y=0;y<10;y++)
 {
  for(int x=0;x<10;x++)
  {
   switch(lb[y][x])
   {
    case 'X' : textcolor(8);break;
    case '?' : textcolor(14);break;
    case '!' : textcolor(4);break;
    default  : textcolor(7);
   }
   cprintf("%c",lb[y][x]);
  }
  gotoxy(w,h+y+1);
 }
 textcolor(7);
}

void Out2(int w,int h)
{
 char lt[]="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 gotoxy(w,h);
 for(int y=0;y<10;y++)
 {
  for(int x=0;x<10;x++)
  {
   if(wv[y][x])textcolor(7),cprintf("%c",lt[wv[y][x]]);
   else textcolor(8),cprintf("/");
  }
  gotoxy(w,h+y+1);
 }
}

void wave(int N=1)
{
 int bool=0;
 for(int y=1;y<9;y++)
  for(int x=1;x<9;x++)
   if(wv[y][x]==N)
   {
    if(lb[y-1][x  ]!='X'&&!wv[y-1][x  ])wv[y-1][x  ]=N+1,bool=1;
    if(lb[y  ][x+1]!='X'&&!wv[y  ][x+1])wv[y  ][x+1]=N+1,bool=1;
    if(lb[y+1][x  ]!='X'&&!wv[y+1][x  ])wv[y+1][x  ]=N+1,bool=1;
    if(lb[y  ][x-1]!='X'&&!wv[y  ][x-1])wv[y  ][x-1]=N+1,bool=1;
   }
 if(bool)wave(N+1);
}

void main()
{
 clrscr();
 memset(wv,0,100);
 Out(2,2);
 wv[3][3]=1;
 wave();
 Out2(13,2);
 getch();
}

 
Код:
XXXXXXXXXX //////////
X....X.X.X /7654/o/q/
X.XX.X...X /8//3/nop/
X.X?.X.XXX /9/12/m///
X.XXXX.X.X /a////l/n/
X...X..X.X /bcd/jk/m/
X.X.X..X.X /c/e/ij/l/
X.X......X /d/fghijk/
X.X.XX.X!X /e/g//j/l/
XXXXXXXXXX //////////

Твой враг, в том месте, где он стоит ставит 1, затем во всех точках вокруг единицы (свободных) ставит 2, затем вокруг каждой двойки... И так далее. Как только одна из цифр окажется там же где и конец пути, все готово. Идешь по этому пути обратно. (У меня - l->k->j->...->1) Этот путь запоминаешь, теперь можно по нему пустить врага.

Прямая видимость - сетуация, когда прямая проведенная от врага к игроку не пересекает ни одного препятствия.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог