Pacman Ghost AI - PullRequest
       19

Pacman Ghost AI

8 голосов
/ 15 ноября 2011

Я сейчас играю в pacman в java.У меня есть вопрос о призраках.

Я понимаю, что призраки не все имеют одинаковый стиль атаки.Сначала я хочу поработать над основами того, как заставить призрака идти за пакманом, и пока не беспокоиться о его различиях.

Мой вопрос к вам, умные люди, состоит в том, как лучше всего сделать призраковпреследовать Pacman, но иногда случайно перенаправить пути.В настоящее время я использую двумерный массив 21 на 21, чтобы сказать, где находятся стены и тому подобное, поэтому я подумал, чтобы он попробовал и отправился к текущему расположению сетки pacman.(например, перейдите к 10,14) Конечно, избегая проходить сквозь стены как pacman.Мне интересно, как я мог заставить это сделать это, а также заставить призраков иногда останавливаться и идти в другом направлении или что-то в этом роде, так что это не всегда постоянная погоня, и у pacman есть шанс уйти.Может быть, некоторые из вас запрограммировали игру pacman или просто знают, как это сделать.Любая помощь будет принята с благодарностью.

(Обратите внимание, что в настоящее время я учусь на курсе 11-х классов по информатике и на полпути к первому семестру в изучении Java.)

Ответы [ 5 ]

6 голосов
/ 15 ноября 2011

Если вы просто хотите, чтобы призраки не все вели себя одинаково, каждый раз, когда они сталкиваются с пересечением, сделайте свое решение случайным сочетанием некоторого разумного преследования по умолчанию (такого как продолжение пути с кратчайшим расстоянием до Пакмана - используйте Алгоритм Дейкстры на всех преемников, чтобы выбрать лучший) и случайный выбор.

4 голосов
/ 15 ноября 2011

Вот возможность: для всех шагов, которые может предпринять призрак, вычислите, приблизит ли этот шаг его к Пакману. Это можно сделать с помощью Манхэттенского расстояния , которое в двумерной сетке представляет собой просто x расстояние + y расстояние. Затем случайным образом выберите шаг с более высокой вероятностью, назначенной тем шагам, которые фактически приблизят его.

Если у вас есть массив steps с первыми n_closing_in шагами, представляющими шаги, которые приблизят призрака к Пакману, тогда вы можете присвоить им общую вероятность prob_closing_in с помощью

double total_probility = 1.;
for (int i=0; i<n_closing_in; i++) {
    step_prob[i] = prob_closing_in / n_closing_in;
    total_probability -= prob_closing_in / n_closing_in;
}

Затем аналогичным образом распределите то, что осталось в total_probability, по ступеням, которые уведут призрака дальше от Пакмана.

Step random_step(Step[] possible_steps, double[] step_prob) {
    double r = Math.random();

    int i;
    for (i=0; i<possible_steps.length(); i++) {
        if (r < step_prob[i])
            break;
        r -= step_prob[i];
    }
    return possible_steps[i];
}

Если лабиринт не слишком сложен и вероятность сближения равна >.5, призраки будут преследовать Пакмана, но случайным образом.

Повышение prob_closing_in в сторону 1. усложнит игру.

(Весь приведенный выше код не протестирован и может содержать ошибки. Я не слишком хорош в Java.)

4 голосов
/ 15 ноября 2011

Мне показалась очень полезной эта статья: Понимание поведения призрака Pac-Man , так как оно объясняет, что вам нужно.

1 голос
/ 15 ноября 2011

Для моего курса по искусству в колледже я немного поработал со старой версией фреймворка Pacman Ghost AI.Похоже, текущую версию можно найти здесь http://www.pacman -vs-ghosts.net / software (сейчас DEAD) .В этом вы будете разрабатывать свои собственные агенты Ghost, чтобы попытаться захватить агента или контролируемого пользователем Pacman.

Это было очень полезно при игре с разными техниками искусственного интеллекта.

Более того, к вашему вопросу, уровни в этой структуре на самом деле построены из графика, а не из двумерного массива.Вы можете взглянуть на код, чтобы увидеть, как они это делают.

Оригинальная ссылка устарела и до сих пор не смогла найти официальное зеркало.Тем не менее, нижеприведенная информация, вероятно, будет полезна:

Понимание поведения Pac Man-призрака Ms Pac Man и Ghost AI (GitHub) PacMan_v6.2 (GitHub)

0 голосов
/ 27 апреля 2016

Самыми простыми реализациями такого ИИ было бы использование алгоритма поиска наивного графика. BFS будет простым, который будет работать. Однако вы, конечно, захотите реализовать эвристику, чтобы лучше оптимизировать время выполнения, поэтому достаточно простого манхэттенского расстояния от призрачного агента до Pac-man.

Краткое описание: BFS с эвристической дистанцией на Манхэттене.

Если вы хотите стать хитрее и сделать своих призраков еще более эффективными при охоте, вы можете реализовать эвристику игрового состояния (основанную на расстоянии от призрака до Pac-man и количестве точек, которые Pac-man съел до сих пор, Например, для использования, когда призрак должен выбрать, какой следующий шаг сделать. В этом случае вы можете использовать методы сокращения , чтобы сократить время выполнения.

...