Programmin 'Pac-Man
Ambientazione
Giochi come Pac-Man. Vuoi raccogliere palline, frutta e pellet prima di chiunque altro, evitando allo stesso tempo i fantasmi.
Regole
- Ogni Pac-Man valido sarà in un singolo labirinto. Vincerà il giocatore con il punteggio cumulativo più alto dopo 10 partite.
- Una partita termina quando tutti i Pac-Men sono morti, tutte le palline sono sparite o sono passati 500 turni
- Se un Pac-Man muore, continua a giocare come un fantasma
- Mangiare una pallina Power ti renderà invincibile per 10 turni e ti permetterà di mangiare Fantasmi
- Mangiare un fantasma teletrasporta il fantasma in una posizione casuale
- I fantasmi non possono mangiare nulla tranne Pac-Men e non ottengono punti
- Mangiando i seguenti oggetti come Pac-Man otterrai i seguenti punti:
- Pellet: 10
- Potenza pellet: 50
- Frutto: 100
- Fantasma: 200
Il labirinto
Se ci sono n Pac-Men, quindi un labirinto di dimensioni sqrt(n)*10
da sqrt(n)*10
verrà generato utilizzando l'algoritmo di Prim (a causa del suo basso fattore di fiume), poi intrecciata completamente, dando la preferenza a vicoli ciechi già esistenti. Inoltre, questa treccia può essere fatta attraverso i bordi, in modo che ci siano alcuni percorsi dall'alto verso il basso e da sinistra a destra.
Ci sarà:
2n
fantasmi4n
Palline di potenza2n
Fruttan
Pac-Men in punti in cui i quadrati dei vicini collegati sono vuoti.- Tutti i punti vuoti rimanenti saranno riempiti con pellet
Quindi, una mappa iniziale con 10 giocatori sarà simile a questa (Fantasmi = verde, Pellet = acqua, frutta = rosso, Pac-Man = giallo):
Input Output
Al All'inizio del gioco , vi sarà data una sola riga di caratteri, che rappresentano le pareti in ogni piazza della mappa. Per ogni quadrato, a partire dall'angolo in alto a sinistra, spostandosi a destra e passando alla riga successiva, ti verrà data una cifra esadecimale che rappresenta la situazione del muro:
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
In parole semplici, Nord = 1, Est = 2, Sud = 4 e Ovest = 8, sommati.
Quindi, ad ogni turno , ti verrà data la tua posizione attuale e gli oggetti nella tua linea di vista (se sei un Pac-Man. Tutti i fantasmi ricevono tutti i quadrati da -5 a +5 dalla loro posizione relativa). La linea di mira si baserà sulla direzione percorsa nell'ultima curva. Se hai viaggiato verso nord, ti verranno dati tutti i quadrati direttamente a nord, est e ovest fino a quando un muro non ti taglierà la vista più un singolo quadrato nord-ovest e nord-est, se nessun muro ti taglia la vista. Se scegli di non muoverti, ti verranno dati i quadrati in tutte e 8 le direzioni.
Per la vista, I
significa invisibile, V
significa visibile, P
significa Pac-Man (supponendo che Pac-Man sia rivolto a nord):
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
Ogni quadrato sarà dato da una coordinata, quindi dal suo contenuto. I suoi contenuti sono rappresentati dai seguenti caratteri:
P
: 1 o più Pac-ManG
: 1 o più fantasmio
: PelletO
: Potenza pelletF
: Piece of FruitX
: Niente
Se c'è un fantasma e qualcos'altro su una piazza, G
verrà restituito.
Quindi, se tu fossi su una piazza 23,70
, ti trasferissi semplicemente a nord, la piazza sopra di te è un vicolo cieco e contiene un pellet di Potenza, e hai muri su entrambi i lati di te, il tuo input sarebbe:
23,70X 22,70O
Nella tua casella attuale, mostrerà a G
se sei un fantasma, a P
se ce n'è un altro Pac-Man nella tua casella, altrimenti unX
Quindi restituirai i seguenti articoli tramite STDOUT:
Un singolo carattere che rappresenta una direzione ( N
orth, E
ast, S
outh, W
est oX
Stay).
Prima di passare in una direzione, puoi anche passare in qualsiasi coordinata come x,y
, e le pareti di quel quadrato saranno passate indietro (come descritto sopra)
Il programma deve essere continuamente in esecuzione fino a quando non Q
viene passato tramite STDIN. I programmi verranno riavviati per ogni gioco.
Non è consentito l'accesso ad altre informazioni al di fuori di ciò che viene passato a STDIN (inclusi altri dati di Pac-Men's o i dati detenuti dal programma host).
La mancata restituzione di una mossa entro 1000 ms termina il programma (in esecuzione sulla mia macchina Win8 abbastanza decente). Ti verranno dati 2 secondi per elaborare il layout iniziale del labirinto quando viene fornito
L'host verrà scritto in Python e il codice per testare il tuo bot è imminente.
Casi eccezionali
- Se più Pac-Men finiscono nella stessa posizione, nessuno dei due ottiene il contenuto del quadrato corrente, a meno che esattamente 1 di essi non sia invincibile, nel qual caso l'invincibile Pac-Man riceverà il pellet.
- Un Pac-Man mangiato da un fantasma non verrà teletrasportato da qualche altra parte. Se due Pac-Men sono su un quadrato e uno è invincibile, il fantasma verrà teletrasportato.
- Essere teletrasportato come uno Spettro ti impedisce di muoverti per 1 turno. Quando giochi come un fantasma, avrai semplicemente il tuo turno saltato
- Il tentativo di muoversi attraverso un muro verrà interpretato come "Resta"
Ciascuno dei fantasmi iniziali riceverà uno dei 4 tratti della personalità, come descritto qui , con la seguente modifica:
- I bug descritti non saranno duplicati
- Saranno tutti attivi dall'inizio
- Sono vulnerabili solo al giocatore che ha mangiato il pellet
- Passeranno indefinitamente da scatter a chase, ognuno con un numero fisso di turni prima del passaggio
- Passando all'inseguimento, troveranno il Pac-Man più vicino da inseguire e inseguiranno quel Pac-Man per tutta la durata del loro inseguimento. (Se c'è un pareggio per vicinanza, il Pac-Man verrà scelto in modo pseudocasuale)
- Blinky non accelera
- Inky sceglierà il fantasma più vicino su cui basare i suoi calcoli dopo il passaggio all'inseguimento.
- Clyde troverà tutti i giocatori a 8 caselle di distanza, quindi seguirà il giocatore più lontano.
- Tutti i fantasmi tranne Clyde non bersagliano un giocatore più lontano di 5 quadrati di distanza
Accetterò il codice compilabile da una lingua standard o un .exe (con codice di accompagnamento).
Suggerimenti per la programmazione
Puoi farlo con il mio controller. Devi inserire una cartella / bots / your_bot_name / nella stessa directory del programma. All'interno della cartella, è necessario aggiungere un command.txt contenente un comando per eseguire il programma (es:python my_bot.py
:) e il tuo bot.
Il codice del controller è su Github (codice Python, richiede Pygame se si desidera la grafica.) Testato su Windows e Linux
PUNTEGGI
ghostbuster: 72.840 punti
patetico: 54.570 punti
miope: 50.820 punti
evitare l'interazione: 23.580 punti
fisico: 18.330 punti
randomwalk: 7.760 punti
dumbpac: 4.880 punti