Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2022, 23:15   #41
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 149
По умолчанию

Код:
void EvTimer(UINT)
{
 static int i2=14;static int j2=19;
 static int s=0;
 static int k=0;
 int bx,by;

 if(k==0)
{
  static int ax=i2;
  static int ay=j2;
 
  bx=rand()%N;
  by=rand()%M;
  
  while(((ax==bx)&&(ay==by))||m[bx][by]=='.')
    {
      bx=rand()%N; by=rand()%M;
     }

   lee(ax,ay,bx,by);
}

if(s<d)
{
 bitmapEnemy.x=i2*20+2;
 bitmapEnemy.y=j2*20+2;

 s++;
 
 i2=px[s];
 j2=py[s];

 k=1;
 }
  else
     {
       s=0;
       ax=bx; ay=by; 
       i2=ax; j2=at;

       bx=rand()%N;
       by =rand()%M;
        
       while(((ax==bx)&&(ay==by))||m[bx][by]=='.')
        {
          bx=rand()%N;
          by=rand()%M;
         }
 
         lee(ax,ay,bx,by);
       }                
 Invalidate(FALSE);
}

Последний раз редактировалось BDA; 07.02.2022 в 23:30.
Timurkh77 вне форума Ответить с цитированием
Старый 07.02.2022, 23:31   #42
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Да, похоже на правду. Можно подсократить (код не компилировал):
Код:
void EvTimer(UINT)
{
    static int i2 = 14;
    static int j2 = 19;
    static int s = 0;

    if (s > d) {
        int bx, by;

        do {
            bx = rand() % N;
            by = rand() % M;
        } while ((i2 == bx && j2 == by) || m[bx][by] == '.');

        lee(i2, j2, bx, by);
        s = 0;
    }

    i2 = px[s];
    j2 = py[s];
    s++;
    bitmapEnemy.x = i2 * 20 + 2;
    bitmapEnemy.y = j2 * 20 + 2;
    Invalidate(FALSE);
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.02.2022, 00:23   #43
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 149
По умолчанию

Первоначально маршрут не построен.Не вызвана функция lee().Поэтому пути в px[s] и py[s] нет.
Timurkh77 вне форума Ответить с цитированием
Старый 08.02.2022, 00:29   #44
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Нужно d инициализировать, например, -1. Тогда сработает код в if, и маршрут будет построен перед использованием.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.02.2022, 01:02   #45
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 149
По умолчанию

А в первый раз px[0] и py[0] содержат i2=14 и j2=19?
Timurkh77 вне форума Ответить с цитированием
Старый 08.02.2022, 01:17   #46
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Да, по идее. Можно сразу после вызова lee делать s = 1, а не 0, чтобы противник не простаивал 1 тик на месте.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.02.2022, 23:31   #47
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 149
По умолчанию

Во второй проход px[0] и py[0] содержат то же,что и px[d] и py[d] для первого прохода?
Timurkh77 вне форума Ответить с цитированием
Старый 08.02.2022, 23:35   #48
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 149
По умолчанию

Откомпилировал программу.Ходит сквозь стены и не стирается.
Вложения
Тип файла: rar pacmang.rar (443.5 Кб, 2 просмотров)
Timurkh77 вне форума Ответить с цитированием
Старый 09.02.2022, 00:16   #49
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
Во второй проход px[0] и py[0] содержат то же,что и px[d] и py[d] для первого прохода?
Да.
Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
Ходит сквозь стены
Скомпилировать не могу, а чисто по коду понять, почему ходит сквозь стены, не могу.
Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
не стирается
Потому что нельзя в алгоритме Ли использовать массив m для хранения волны по нескольким причинам:
1) этот массив используется для отрисовки, а там вместо пустых мест (пробелов) будет волна;
2) пробел, точка и звездочка численно равны 32, 46 и 42, поэтому когда шаг волны будет равен такому числу, получится не пойми что;
3) char вмещает 256 разных значений, но карта больше, т.е. есть вероятность, что путь не поместится.
Исправить так, как было в коде по ссылке:
Код:
// завести константы для наглядности кода
const int WALL   = -1;
const int BLANK  = -2;
...
// завести отдельный массив
int px[N*M], py[N*M], grid[N][M];
...
// инициализировать в функции Ли
for (y = 0; y < N; ++y)
    for (x = 0; x < M; ++x)
        grid[y][x] = (g[y][x] == '.') ? WALL : BLANK;
...
// проверять
if (iy >= 0 && iy < N && ix >= 0 && ix < M && grid[iy][ix] == BLANK)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 09.02.2022 в 01:24.
BDA вне форума Ответить с цитированием
Старый 09.02.2022, 16:37   #50
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 149
По умолчанию

Изменил программу так в функции Lee:
for (y = 0; y < N; ++y)
for (x = 0; x < M; ++x)
grid[y][x] = (g[y][x] == '.') ? WALL : BLANK;

Программа зависает.
Матрица grid int, а g[N][M] char они совместимы?
Вложения
Тип файла: rar pacman.rar (2.9 Кб, 2 просмотров)
Timurkh77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с загрузкой звука в игре типа 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 21:17
Зависание игры после отбивания шара (TShape) противником (Delphi) alex 2000 Помощь студентам 0 06.02.2012 13:47