Programmin 'Pac-Man
настройка
Вы играете за Pac-Man. Вы хотите собирать гранулы, фрукты и энергетические гранулы раньше всех, избегая привидений.
правила
- Каждый действительный Pac-Man будет в одном лабиринте. Игрок с наибольшим совокупным счетом после 10 игр победит.
- Игра заканчивается, когда все Pac-Men мертвы, все шарики ушли или прошло 500 ходов
- Если Pac-Man умирает, он продолжает играть как призрак
- Употребление в пищу гранул сделает вас непобедимыми на 10 ходов и позволит вам съесть призраков
- Еда Призрака телепортирует Призрака в случайное место
- Призраки не могут есть ничего, кроме Pac-Men, и не получают никаких очков
- Употребление в пищу следующих предметов в качестве Pac-Man принесет вам следующие очки:
- Пеллет: 10
- Мощность пеллет: 50
- Фрукты: 100
- Призрак: 200
Лабиринт
Если есть п Pac-Men, то лабиринт размера sqrt(n)*10
по sqrt(n)*10
будет генерироваться с помощью алгоритма Примы (из - за его низкий коэффициент реки), затем скручивается полностью, отдавая предпочтение уже существующих тупиков. Кроме того, это плетение может быть сделано по краям, так что есть несколько путей сверху вниз и слева направо.
Там будет:
2n
привидения4n
Power Pellets2n
Фруктыn
Pac-Men в местах, где соседние квадраты пустые.- Все оставшиеся пустые места будут заполнены гранулами
Следовательно, исходная карта с 10 игроками будет выглядеть примерно так (Ghosts = зеленый, Pellets = аква, фрукты = красный, Pac-Man = желтый):
Ввод, вывод
В начале игры вам будет предоставлена одна строка символов, представляющая стены в каждом квадрате карты. Для каждого квадрата, начиная с верхнего левого угла, двигаясь вправо и заканчивая следующей строкой, вам будет дана шестнадцатеричная цифра, обозначающая ситуацию на стене:
0: No walls
1: North wall
2: East wall
3: East & North wall
4: South wall
5: South & North wall
6: South & East wall
7: Won't occur
8: West wall
9: West & North wall
A: West & East wall
B: Won't occur
C: West & South wall
D: Won't occur
E: Won't occur
F: Won't occur
Проще говоря, север = 1, восток = 2, юг = 4 и запад = 8, сложенные вместе.
Затем, на каждом ходу вам будет предоставлена ваша текущая позиция и предметы на вашей прямой видимости (если вы Pac-Man. Все призраки получают все клетки от -5 до +5 от их относительной позиции). Ваша прямая видимость будет зависеть от направления, которое вы прошли в последний поворот. Если вы путешествовали на север, вам будут предоставлены все квадраты непосредственно к северу, востоку и западу от вас, пока стена не отрежет ваш взгляд, плюс один квадрат к северо-западу и северо-востоку, если ни одна стена не отрежет ваш взгляд. Если вы решите не двигаться, вам дадут квадраты во всех 8 направлениях.
Для визуального, I
означает невидимый, V
означает видимый, P
означает Pac-Man (при условии, что Pac-Man направлен на север):
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
Каждый квадрат будет задан координатой, а затем его содержимым. Его содержимое представлено следующими символами:
P
: 1 или больше Pac-ManG
: 1 или более призраковo
: ПеллетO
: Мощность пеллетF
: ФруктX
: Ничего такого
Если на квадрате есть призрак и что-то еще, G
будет возвращено.
Следовательно, если вы были на квадрате 23,70
, вы просто двинулись на север, квадрат над вами - тупик и содержит шарик силы, и у вас есть стены по обе стороны от вас, ваш вход будет:
23,70X 22,70O
На вашем текущем квадрате будет показано, G
если вы Призрак, a, P
если на вашем квадрате есть другой Pac-Man, в противном случаеX
Затем вы вернете следующие товары через STDOUT:
Отдельный символ, обозначающий направление ( N
orth, E
ast, S
outh, W
est или X
Stay).
Перед передачей в направлении, вы также можете передать в любой координате как x,y
, и стены этого квадрата будут переданы обратно (как описано выше)
Программа должна непрерывно работать, пока не Q
будет передана через STDIN. Программы будут перезапущены для каждой игры.
Доступ к другой информации за пределами того, что передается в STDIN (включая другие данные Pac-Men или данные, хранящиеся в хост-программе), не разрешен.
Невозможность вернуть ход в течение 1000 мс завершит программу (работает на моей довольно приличной машине с Win8). Вам дадут 2 секунды, чтобы обработать начальный макет лабиринта, когда он
Хост будет написан на Python, и скоро появится код для тестирования вашего бота.
Исключительные случаи
- Если несколько Pac-Men окажутся в одном месте, ни один из них не получит содержимое текущего квадрата, если только один из них не является непобедимым, и в этом случае непобедимый Pac-Man получит шарик.
- Pac-Man, съеденный Призраком, не будет телепортироваться куда-то еще. Если двое Pac-Men находятся на квадрате, а один непобедим, призрак будет телепортирован.
- Будучи телепортированным как Призрак, вы не можете двигаться на 1 ход. Играя за Призрака, вы просто пропустите свой ход
- Попытка пройти сквозь стену будет интерпретирована как «Пребывание»
Каждый из первоначальных призраков получит одну из 4 черт личности, как описано здесь , со следующей модификацией:
- Описанные ошибки не будут продублированы
- Все они будут активны с самого начала
- Они уязвимы только для игрока, который съел шарик
- Они будут бесконечно переключаться с разброса на погони, каждый из которых будет иметь фиксированное число оборотов до переключения
- После переключения в погоню, они найдут ближайшего Pac-Man, чтобы преследовать, и будут преследовать этого Pac-Man в течение всего времени их погони. (Если есть связь для близости, Pac-Man будет выбран псевдослучайно)
- Блинки не будет ускоряться
- Инки выберет ближайшего призрака, чтобы основать свои расчеты после переключения на погоню.
- Клайд найдет всех игроков на расстоянии 8 клеток, а затем последует за самым дальним игроком.
- Все призраки, кроме Клайда, не будут нацеливаться на игрока дальше, чем на 5 клеток
Я приму скомпилированный код из стандартного языка или .exe (с сопровождающим кодом).
Советы по программированию
Вы можете с моим контроллером. Вам нужно поместить папку / bots / your_bot_name / в тот же каталог, что и программа. В этой папке вам нужно добавить command.txt, содержащий команду для выполнения вашей программы (например:) python my_bot.py
, и вашего бота.
Код контроллера находится на Github (код Python, если вам нужна графика, требуется Pygame). Протестировано на Windows и Linux.
РЕКОРДЫ
Охотник за привидениями: 72 840 очков
путь: 54 570 баллов
близорукость: 50 820 баллов
избегать взаимодействия: 23 580 баллов
физик: 18,330 баллов
randomwalk: 7 760 очков
тупица: 4880 баллов
источник
Ответы:
GhostBuster - Python
Выбирает случайное место на карте, использует алгоритм A *, чтобы найти лучший путь вперед. Как только он достигнет пункта назначения, он выберет новый и продолжит. Он будет пытаться избежать призраков, но из-за ограниченного поля зрения он будет иногда сталкиваться с ними. Это позволит избежать прогулок по уже посещенным местам.
Использует код Спарра, спасибо за логику.
Windows 7, Visual Studios с инструментами Python. Должен работать на коробках Linux.
источник
близоруким
Этот пак избегает смежных призраков, если только он не может их съесть, переходит на смежные фрукты или шарики и ходит наугад в качестве крайней меры.
источник
Avoider
Избегайте всех призраков, как pacman, и всех pacmen, когда призрак. Пытается избегать любого его вида, если это возможно, и затем избегает поворота 180, если это возможно.
источник
Физик, Хаскелл
Физик Пак-Мэн считает, что закон всемирного тяготения Ньютона может помочь ему выиграть игру. Затем он просто применяет его ко всем другим объектам, которые он знает во время игры. Поскольку физик стар и имеет плохую память, он может помнить вещи только за 5 раундов. Оооочень, плохая память на самом деле помогает ему забивать лучше.
Этот ответ имеет два филе:
Main.hs
, содержит интересную часть.Pacman.hs
Скучный код дескриптор протокола. Вы можете использовать его, чтобы написать собственное решение для haskell. Он не содержит кода AI.Ой, подожди, у нас
Makefile
тоже есть.Вот и они:
Main.hs
Pacman.hs
Makefile
command.txt
источник
Main' Expected
Pacman», когда я пытаюсь это сделать. Кроме того, для того, чтобы запустить его, мне просто нужно сделать это, или мне нужно выполнить еще одну команду?physicist
исполняемый файл. Отредактировано и добавленоcommand.txt
, сейчас.physicist.hs
вMain.hs
мае работы. Я обновил ответ.dumbpac
Этот пакет просто перемещается наугад, не обращая внимания на расположение лабиринта, призраков или каких-либо других факторов.
Perl:
Python:
источник
случайная прогулка
этот пак ходит наугад, но не в стенах
источник
Pathy, Python 3
Этот бот использовать путь найти много. Учитывая начальную позицию и конечное условие, он использует простую BFS, чтобы найти кратчайший путь. Поиск пути используется в:
command.txt
pathy.py
источник
objects = [(tuple(map(int, x[:-1].split(',')))[::-1], x[-1]) for x in line.split(' ')]
бросаетValueError: invalid literal for int() with base 10: '8o'