#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();
}
Про игрушку
Подскажите, пожалуйста.
Цитата:
Originally posted by Redneck
Я решил сделать игрушку типа старого Wolfenstein'а с помощью Delphi и OpenGL. И нужно мне вот что: как там был устроен AI фрицев ?
Подскажите, пожалуйста.
Я решил сделать игрушку типа старого Wolfenstein'а с помощью Delphi и OpenGL. И нужно мне вот что: как там был устроен AI фрицев ?
Подскажите, пожалуйста.
Можно разбить карту на квадраты и используя волновой метод поиска путь направлять врагов к игроку. Пусть, скажем, враг начинает погоню, когда до пользователя 50 шагов (квадратов пути), а останавливается за 10 или при прямой видимости. Стреляет тоже, в случае прямой видимости.
Вот самый простой вариант ИИ.=)
Это, конечно, хорошо, мне пригодится, но хотелось бы поподробнее: к примеру, что это за волновой метод? Или еще: как определить, видит ли враг игрока ?
Цитата:
Originally posted by Redneck
Это, конечно, хорошо, мне пригодится, но хотелось бы поподробнее: к примеру, что это за волновой метод? Или еще: как определить, видит ли враг игрока ?
Это, конечно, хорошо, мне пригодится, но хотелось бы поподробнее: к примеру, что это за волновой метод? Или еще: как определить, видит ли враг игрока ?
Код:
Код:
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 //////////
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) Этот путь запоминаешь, теперь можно по нему пустить врага.
Прямая видимость - сетуация, когда прямая проведенная от врага к игроку не пересекает ни одного препятствия.