Programmin 'Pac-Man
Налаштування
Ви граєте як Pac-Man. Ви хочете збирати гранули, фрукти та силові гранули раніше, ніж будь-хто інший, уникаючи привидів.
Правила
- Кожен дійсний Пак-Людина буде в одному лабіринті. Виграє гравець з найвищим сукупним балом після 10 ігор.
- Гра закінчена, коли всі Pac-Men мертві, всі гранули пішли або пройшло 500 оборотів
- Якщо Пак-Людина помирає, він продовжує грати як привид
- Харчування гранул потужності зробить вас непереможними протягом 10 обертів і дозволить вам поїсти Привидів
- Їсть привид телепортує привид у випадкове місце
- Привиди не можуть їсти нічого, крім Пак-Мен, і не отримують балів
- Якщо їсти такі предмети як Pac-Man, ви отримаєте наступні моменти:
- Пеллет: 10
- Потужність гранул: 50
- Плід: 100
- Привид: 200
Лабіринт
Якщо є п Pac-Men, то лабіринт розміру sqrt(n)*10
по sqrt(n)*10
буде генеруватися з допомогою алгоритму Прими (з - за його низький коефіцієнт річки), потім скручується повністю, віддаючи перевагу вже існуючих тупиків. Крім того, це плетіння можна зробити по краях, щоб було кілька доріжок зверху вниз і зліва направо.
Буде:
2n
Привиди4n
Гранули харчування2n
Фруктиn
Pac-Men у місцях, де скріплені сусідські квадрати порожні.- Всі залишки порожніх плям будуть заповнені гранулами
Отже, початкова карта з 10 гравцями виглядатиме приблизно так (Привиди = зелений, Пеллети = аква, фрукти = червоні, 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, додані разом.
Потім, кожного повороту , ви будете отримувати своє поточне положення та предмети, що знаходяться у вашій зорі (якщо ви людина-Пак. Усі привиди отримують усі квадрати від -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
якщо ви - Привид, а P
якщо на вашому квадраті є інший Пак-Людина, інакше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 опиняються в одному місці, не отримують вмісту поточного квадрата, якщо рівно 1 з них не є непереможним, і в цьому випадку непереможний Pac-Man отримає гранулу.
- Людина-Пак, з'їдена Привидом, не буде передана деінде. Якщо два чоловіки-паки на площі, а один - непереможний, привид буде телепортуватися.
- Телепортування як Привид перешкоджає вам рухатися на 1 крок. Якщо ви граєте як Привид, ви просто пропустите свою чергу
- Спроба рухатися через стіну буде трактуватися як "Залишайтеся"
Кожен з початкових привидів отримає одну з чотирьох рис особистості, як описано тут , із наступною модифікацією:
- Описані помилки не дублюються
- Всі вони будуть активними з самого початку
- Вони вразливі лише для гравця, який їв гранули
- Вони нескінченно перейдуть з розсіювання на погоню, кожен з яких має фіксовану кількість витків перед перемиканням
- Перейшовши на погоню, вони знайдуть найближчого Пак-Мана, щоб переслідувати, і переслідують цього Пак-Мана протягом тривалості їх погоні. (Якщо є зв'язок для близькості, 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 балів
випадковий пробіг: 7 760 балів
гантель: 4880 балів