Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 40000 рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2021, 21:27   #1
Timurkh77
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 72
По умолчанию Интеллект с противником в игре Pacman пр

Запрограммировал движение врага в функции EvTimer(UINT).При натыкании на стену враг должен не идти,однако он проходит сквозь стену.
Код на проход врага в функции EvTimer (здесь),вся программа ниже.В функции EvKeyDown осуществляется движение колобка нашего , функция проверяет на стену,если он натыкается на стену, то ничего не происходит.

Код:
s2=0;

if(m[i2-1][j2]==' ')
  {
        stekE1[l2++]=i2-1;
	stekE2[k2++]=j2;
	s2=1;
	bitmapEnemy.y-=20;
	
  }
	else
	  if(m[i2-1][j2]=='*')
		{
			stekE1[l2++]=i2-1;
			stekE2[k2++]=j2;
			s2=1;
			bitmapEnemy.y-=20;
		}


	if(m[i2][j2-1]==' ')
	{
	 stekE1[l2++]=i2;
	 stekE2[k2++]=j2-1;
	 s2=1;
	 bitmapEnemy.x-=20;
	}
	else
		 if(m[i2][j2-1]=='*')
		  {
			stekE1[l2++]=i2;
			stekE2[k2++]=j2-1;
			s2=1;
			bitmapEnemy.x-=20;
		  }


  if(m[i2][j2+1]==' ')
	{
	  stekE1[l2++]=i2;
	  stekE2[k2++]=j2+1;
	  s2=1;
	  bitmapEnemy.x+=20;

	 }
		else
			 if(m[i2][j2+1]=='*')
			  {
			  	stekE1[l2++]=i2;
				stekE2[k2++]=j2+1;
				s2=1;
				bitmapEnemy.x+=20;
			  }

  if(m[i2+1][j2]==' ')
		{
		  stekE1[l2++]=i2+1;
		  stekE2[k2++]=j2;
		  s2=1;
		  bitmapEnemy.y+=20;
		}
		else
			 if(m[i2+1][j2]=='*')
			  {
				stekE1[l2++]=i2+1;
				stekE2[k2++]=j2;
				s2=1;
				bitmapEnemy.y+=20;
			  }
if(s2==1)
	 {
	  Invalidate(FALSE);
	  i2=stekE1[--l2];j2=stekE2[--k2];
	 }
	 else
		if(s2==0)
		 {
		  Invalidate(FALSE);
		 }
Вся программа:
Вложения
Тип файла: rar pacman12.rar (8.7 Кб, 1 просмотров)

Последний раз редактировалось BDA; 24.08.2021 в 03:10.
Timurkh77 вне форума Ответить с цитированием
Старый 15.08.2021, 23:24   #2
Timurkh77
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 72
По умолчанию

Я осуществляю поиск свободного пути просматривая карту местности , если есть путь в соседнюю клетку , то по таймеру я в неё перемещаюсь.Например если свободна верхняя клетка:
Код:
if(m[i2-1][j2]==' ')
{
stekE1[l2++]=i2-1;
stekE2[k2++]=j2;
s2=1;
bitmapEnemy.y-=20;
}
Помещаю ее в стек и перемещаюсь вверх.Но почему-то в игре противник проходит сквозь стену , то есть если m[i2-1][j2]=='.'

Последний раз редактировалось BDA; 24.08.2021 в 03:10.
Timurkh77 вне форума Ответить с цитированием
Старый 22.08.2021, 20:24   #3
Timurkh77
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 72
По умолчанию

По карте местности ищем пустую вершину,путь в соседнюю клетку.
if(m[i2-1][j2]==' ')

Здесь в ширину 32 клетки в каждых кавычках

Код:
char *g[N]  ={"................................",
		    "..                             .",
		    ".   .........           *      .",
		    "..       .      .... ...     . .",
		    "..*    . .         . .. *   .. .",
		    ".      . ......   .......      .",
		    ".  ... .       .               .",
		    ".      . ......     .  .       .",
		    ". .... .         ....  .       .",
		    ".    . . ......  ....      ... .",
		    ". ..                           .",
		    ". ..   ....................... .",
		    ".                               ",
		    ".      ................  ..... .",
		    ".    ..............  .......   .",
		    ".    .                     .   .",
		    ".    .      . .     *      .   .",
		    ".    .        .  *             .",
		    ".    .      . .                .",
		    ".    .      . ................ .",
		    ".    .            *            .",
		    ".    .        ............ ... .",
		    ".    .        .          . .   .",
		    ".    .        .          . .   .",
		    ".    .        .          . ... .",
		    ".    .       .... ...... .   . .",
		    "................................",
		  };

void TMyWin::SetupWindow()
{
char m[N][M];

for(i=0;i<N;i++)
	for(j=0;j<M;j++)
	  {
		m[i][j]=g[i][j];
	  }
}

void TMyWin::EvTimer(UINT)
{
if(m[i2-1][j2]==' ')
{
stekE1[l2++]=i2-1;
stekE2[k2++]=j2;
s2=1;
bitmapEnemy.y-=20;
}
}

Последний раз редактировалось BDA; 24.08.2021 в 03:10.
Timurkh77 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с загрузкой звука в игре типа Pacman Timurkh77 Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 13.09.2018 05:23
Графическая ошибка в игре типа Pacman Timurkh77 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 18.08.2018 22:08
Какие знания по php и mysql нужно иметь, что бы в игре сделать такой бой в онлайн текстовой игре jonikster Общие вопросы Web 4 15.06.2016 18:10
Интеллект компьютера в игре покер на костях Pepsy Общие вопросы C/C++ 1 06.04.2013 20:17
Зависание игры после отбивания шара (TShape) противником (Delphi) alex 2000 Помощь студентам 0 06.02.2012 12:47