Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
13th
Дек
Интеллект компьютера в игре Pacman
Posted by obzor under c/c++, Gamedev - cоздание игр
Запрограммировал движение врага в функции 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);
}
Вся программа:
Сложно понять почему враг через стену проходит, вроде бы по коду проверки есть пересечение для пустой клетки и для жемчужины, но нет проверки пересечения для стены. Может быть в этом причина? Я не понял какую роль играет массивы стэк stekE1 и stekE2?
Враг перемещается по таймеру , если есть пустая клетка вверху ,внизу,слева,справа ,то мы перемещаемся в эту клетку: сохраняем эту вершину stekE1[l2++]=i2-1,stekE2[k2++]=j2 и если есть путь if(s2==1) , то мы делаем текущей следующую клетку i2=stekE1[—l2],j2=stekE2[—k2] и перемещаемся в нее bitmapEnemy.y-=20.В противном случае ,если стена , то ничего не делается.
Могу предположить, что в массивы stekE1 и stekE2 каким-то образом, в какой-то момент, при каких-то условиях, записываются координаты стены и враг начинает гулять через стену. Надо в отладчике Borland С++ проверить.
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)