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ФруктиnPac-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:
Один символ, що представляє напрямок ( North, East, South, West, або Xstay).
Перш ніж пройти в напрямку, ви також можете пройти в будь-якій координаті як 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 балів