Programmin Pac-Man
Oprawa
Grasz jako Pac-Man. Chcesz zbierać granulki, owoce i granulki mocy przed kimkolwiek innym, unikając duchów.
Zasady
- Każdy ważny Pac-Man będzie w jednym labiryncie. Gracz z najwyższym łącznym wynikiem po 10 grach wygra.
- Gra kończy się, gdy wszyscy Pac-Men nie żyją, wszystkie granulki zniknęły lub minęło 500 tur
- Jeśli Pac-Man umrze, nadal gra jako duch
- Zjedzenie granulki mocy sprawi, że będziesz niezwyciężony przez 10 tur i będziesz mógł jeść duchy
- Jedzenie ducha teleportuje ducha w losowe miejsce
- Duchy nie mogą jeść niczego oprócz Pac-Men i nie otrzymują żadnych punktów
- Zjedzenie następujących przedmiotów jako Pac-Man zapewni ci następujące punkty:
- Pellet: 10
- Power Pellet: 50
- Owoc: 100
- Duch: 200
Labirynt
Jeśli istnieją n Pac-Men, a potem labiryntem wielkości sqrt(n)*10
przez sqrt(n)*10
zostaną wygenerowane przy użyciu Algorytm Prima (ze względu na jego niski współczynnik rzeki), a następnie pleciony całkowicie, dając pierwszeństwo do już istniejących ślepych zaułków. Co więcej, ten oplot można wykonać na krawędziach, dzięki czemu istnieje kilka ścieżek od góry do dołu i od lewej do prawej.
Tam będzie:
2n
Duchy4n
Power Pellets2n
Owocn
Pac-Men w miejscach, w których kwadraty połączonych sąsiadów są puste.- Wszystkie pozostałe puste miejsca zostaną wypełnione granulkami
Dlatego początkowa mapa z 10 graczami będzie wyglądać mniej więcej tak (Duchy = zielony, Pellety = aqua, owoce = czerwony, Pac-Man = żółty):
Wejście wyjście
Na początku gry otrzymasz jedną linię postaci reprezentujących ściany w każdym kwadracie na mapie. Za każdy kwadrat, zaczynając od lewego górnego rogu, przesuwając się w prawo i zawijając do następnego wiersza, otrzymasz cyfrę szesnastkową reprezentującą sytuację na ścianie:
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
Krótko mówiąc, Północ = 1, Wschód = 2, Południe = 4 i Zachód = 8, zsumowane.
Następnie, w każdej turze , otrzymasz swoją aktualną pozycję i przedmioty na linii wzroku (jeśli jesteś Pac-Manem. Wszystkie duchy otrzymują wszystkie pola od -5 do +5 od ich względnej pozycji). Twoja linia wzroku będzie zależeć od kierunku, w którym podróżowałeś w ostatnim zakręcie. Jeśli podróżowałeś na północ, dostaniesz wszystkie kwadraty bezpośrednio na północ, wschód i zachód od ciebie, dopóki ściana nie ograniczy twojego widoku plus jeden kwadrat na północnym zachodzie i północnym wschodzie, jeśli żadna ściana nie ograniczy twojego widoku. Jeśli zdecydujesz się nie ruszać, otrzymasz kwadraty we wszystkich 8 kierunkach.
Dla wizualnego I
oznacza niewidzialny, V
oznacza widoczny, P
oznacza Pac-Man (zakładając, że Pac-Man jest skierowany na północ):
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
Każdy kwadrat otrzyma współrzędną, a następnie jej zawartość. Jego zawartość są reprezentowane przez następujące znaki:
P
: 1 lub więcej Pac-ManG
: 1 lub więcej Duchówo
: PelletO
: Power pelletF
: Kawałek OwocuX
: Nic
Jeśli na kwadracie jest duch i coś jeszcze, G
zostanie zwrócone.
Dlatego jeśli byłeś na kwadracie 23,70
, po prostu przeniosłeś się na północ, kwadrat nad tobą jest ślepym zaułkiem i zawiera kulę mocy, a masz ściany po obu stronach ciebie, twój wkład byłby następujący:
23,70X 22,70O
Na twoim obecnym polu pokaże się, G
jeśli jesteś Duchem, a P
jeśli na twoim polu jest inny Pac-Man, w przeciwnym razieX
Następnie za pośrednictwem STDOUT zwrócisz następujące elementy:
Pojedynczy znak reprezentujący kierunek ( N
orth, E
ast, S
outh, W
est lub X
Stay).
Przed przejściem w danym kierunku możesz również x,y
podać dowolną współrzędną jako , a ściany tego kwadratu zostaną cofnięte (jak opisano powyżej)
Program musi działać nieprzerwanie, dopóki nie Q
zostanie przekazany do niego przez STDIN. Programy zostaną uruchomione ponownie dla każdej gry.
Dostęp do innych informacji poza danymi przekazywanymi do STDIN (w tym innymi danymi Pac-Men lub danymi przechowywanymi przez program hosta) jest niedozwolony.
Brak zwrócenia ruchu w ciągu 1000 ms spowoduje zakończenie programu (działającego na mojej dość przyzwoitej maszynie Win8). Otrzymasz 2 sekundy na przetworzenie początkowego układu labiryntu, gdy zostanie podany
Host zostanie napisany w Pythonie, a kod do testowania twojego bota jest już dostępny.
Wyjątkowe przypadki
- Jeśli wielu Pac-Men znajdzie się w tym samym miejscu, nie zdobądź zawartości aktualnego kwadratu, chyba że dokładnie 1 z nich jest niepokonany, w takim przypadku niezwyciężony Pac-Man otrzyma kulkę.
- Pac-Man zjedzony przez Ducha nie zostanie teleportowany gdzie indziej. Jeśli dwóch Pac-Menów jest na kwadracie, a jeden jest niezwyciężony, duch zostanie teleportowany.
- Teleportacja jako duch uniemożliwia ci ruch przez 1 turę. Grając jako duch, po prostu pominiesz swoją turę
- Próba przejścia przez ścianę będzie interpretowana jako „Zostań”
Każdy z początkowych duchów otrzyma jedną z 4 cech osobowości, jak opisano tutaj , z następującą modyfikacją:
- Opisane błędy nie będą duplikowane
- Wszystkie będą aktywne od samego początku
- Są wrażliwe tylko na gracza, który zjadł granulkę
- Będą bezterminowo przełączać się z rozproszenia na pościg, z których każdy ma określoną liczbę zwojów przed przełączeniem
- Po przejściu na pogoń znajdą najbliższego Pac-Mana, który będzie go ścigał, i będzie go ścigał przez czas trwania ich pościgu. (Jeśli istnieje remis dla bliskości, Pac-Man zostanie wybrany pseudolosowo)
- Blinky nie przyspieszy
- Inky wybierze najbliższego ducha, aby oparł swoje obliczenia po przejściu na pościg.
- Clyde znajdzie wszystkich graczy 8 pól dalej, a następnie podąży za najdalszym graczem.
- Wszystkie duchy oprócz Clyde'a nie będą celowały w gracza znajdującego się w odległości większej niż 5 pól
Przyjmę kod kompilowalny ze standardowego języka lub pliku .exe (z dołączonym kodem).
Wskazówki dotyczące programowania
Możesz z moim kontrolerem. Musisz umieścić folder / bots / your_bot_name / w tym samym katalogu co program. W folderze musisz dodać plik command.txt zawierający polecenie do wykonania programu (np python my_bot.py
.:) i bota.
Kod kontrolera znajduje się na Github (kod Pythona, jeśli potrzebujesz grafiki, wymaga Pygame). Testowany na Windowsie i Linuksie
WYNIKI
Ghostbuster: 72 840 punktów
pathy: 54 570 punktów
krótkowzroczny: 50,820 punktów
Unikaj interakcji: 23 580 punktów
fizyk: 18,330 punktów
losowy spacer: 7760 punktów
dumbpac: 4880 punktów