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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2022, 01:21   #51
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
Матрица grid int, а g[N][M] char они совместимы?
Да. Опечатки в коде:
Код:
grid[y][x] = (g[y][x] == '.') ? WALL : BLANK; // а не одинарное =



if (iy >= 0 && iy < N && ix >= 0 && ix < M && grid[iy][ix] == len) // а не == d внутри while (len > 0)



        do
        {
            do
            {
                bx = rand() % M; // перепутаны размеры M и N
                by = rand() % N;
            }
            while ((i2 == bx && j2 == by) || m[by][bx] == '.'); // а не m[bx][by]
        }
        while (!lee(i2, j2, bx, by)); // добавлен цикл по результату работы Ли, если точка недостижима



  bitmapEnemy.x = i2 * 20 + 2; // i2 и j2 перепутаны местами
  bitmapEnemy.y = j2 * 20 + 2;
Чтобы противник стал ходить чуть-чуть разнообразнее, можно добавить случайный выбор из доступных клеток при сохранении пути в px, py:
Код:
    int vars[4], vars_count;
    while (len > 0)
    {
        px[len] = x;
        py[len] = y;
        len--;

        vars_count = 0;
        for (k = 0; k < 4; ++k)
        {
            int iy = y + dy[k], ix = x + dx[k];

            if (iy >= 0 && iy < N && ix >= 0 && ix < M && grid[iy][ix] == len)
            {
                vars[vars_count] = k;
                vars_count++;
            }
        }
        k = vars[rand() % vars_count];
        x += dx[k];
        y += dy[k];
    }
Еще можно убрать из кода проверку "iy >= 0 && iy < N && ix >= 0 && ix < M", так как есть ограничивающая стена.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.02.2022 в 01:26.
BDA вне форума Ответить с цитированием
Старый 10.02.2022, 20:53   #52
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 151
По умолчанию

Исправил ,все равно зависает?

В SetupWindow() инициализируется
bitmapEnemy.x=j2*20+2;
bitmapEnemy.y=i2*20+2;,

а в EvTimer
bitmapEnemy.x=i2*20+2;
bitmapEnemy.y=j2*20+2;
нет ли противоречия?
Вложения
Тип файла: rar pacmang.rar (2.9 Кб, 1 просмотров)

Последний раз редактировалось Timurkh77; 10.02.2022 в 21:02.
Timurkh77 вне форума Ответить с цитированием
Старый 10.02.2022, 22:06   #53
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
нет ли противоречия?
Да, получилась путаница с i2 и j2 во всем коде EvTimer. Стоит удалить "static int i2=14; static int j2=19;", чтобы использовать глобальные i2, j2. А еще, может быть, переименовать эти переменные, чтобы в будущем не путаться.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.02.2022, 22:46   #54
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 151
По умолчанию

Если закомментируем static int i и j,то все равно bitmapEnemy будут присваиваться разные i и j в SetupWindow() и EvTimer или нет.И что делать?Почему программа при компиляции висит?
Timurkh77 вне форума Ответить с цитированием
Старый 11.02.2022, 01:34   #55
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
И что делать?
Да, я что-то много раз переписывал сообщение, а главное не написал. Нужно пройтись по всей функции EvTimer и поправить неверное использование i2 и j2.
Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
Почему программа при компиляции висит?
Программа, все-таки, висит не при компиляции, а при запуске. Скорее всего, потому что из-за перепутанных координат начальная координата попала в стену, и алгоритм Ли просто не может найти путь в бесконечных попытках.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.02.2022, 18:36   #56
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 151
По умолчанию

Не понял
bitmapEnemy.x=i2*20+2;
bitmapEnemy.y=j2*20+2;
в EvTimer правильно или нет.В других местах в EvTimer переменных i2 и j2 вроде бы нет. И как инициализировать bitmapEnemy.x и y в SetupWindow?
Timurkh77 вне форума Ответить с цитированием
Старый 11.02.2022, 19:47   #57
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Поэтому я и предложил переименовать эти переменные, потому что соотносить i и j с x и y неудобно.
Цитата:
Сообщение от Timurkh77 Посмотреть сообщение
В других местах в EvTimer переменных i2 и j2 вроде бы нет.
В EvTimer каждая используется по 4 раза. В SetupWindow можно оставить как есть, а в EvTimer нужно их поменять местами.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.02.2022, 21:26   #58
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 151
По умолчанию

Изменил переменные ,код в pacman2.rar.

В EvTimer изменил:
bitmapEnemy.x=j2*20+2;
bitmapEnemy.y=i2*20+2;

Все равно зависает.
Вложения
Тип файла: rar pacman2.rar (2.9 Кб, 3 просмотров)
Timurkh77 вне форума Ответить с цитированием
Старый 11.02.2022, 21:33   #59
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Еще:
Код:
bx = rand() % M;
by = rand() % N;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.02.2022, 23:14   #60
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 151
По умолчанию

Изменил , все равно зависает.
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