Scriptbot Warz!
I risultati sono arrivati e Assassin è il nostro campione, vincendo 2 partite su 3! Grazie a tutti coloro che hanno inviato i loro Scriptbot! Un ringraziamento speciale alle trombe per BestOpportunityBot che ha mostrato un percorso eccellente e ha fatto pieno uso di tutte le opzioni di azione.
Mappa 1
Assassin ha eliminato BestOpportunityBot all'inizio e il resto della partita è stato piuttosto noioso. Play-by-play dettagliato qui.
- Assassino: 10 HP, 10 danni inflitti, 3 danni subiti
- The Avoider v3: 10 HP, 0 danni inflitti, 0 danni subiti
- Devo finire di mangiare: 10 HP, 0 danni inflitti, 0 danni subiti
- BestOpportunityBot: 0 HP, 3 danni inflitti, 10 danni subiti
Mappa 2
BestOpportunityBot ha svolto gran parte del lavoro in questa partita, ma Assassin è stato in grado di eliminarlo alla fine. Play-by-play dettagliato qui.
- Assassino: 2 HP, 10 danni inflitti, 9 danni subiti
- BestOpportunityBot: 0 HP, 32 danni inflitti, 10 danni subiti
- The Avoider v3: 0 HP, 0 danni inflitti, 12 danni subiti
- Devo finire di mangiare: 0 HP, 0 danni inflitti, 11 danni subiti
Mappa 3
BestOpportunityBot ha spinto tutti in trappole in questa partita. Molto bello. Play-by-play dettagliato qui.
- BestOpportunityBot: 10 HP, 30 danni inflitti, 0 danni subiti
- Assassino: 0 HP, 0 danni inflitti, 0 danni subiti
- Devo finire di mangiare: 0 HP, 0 danni inflitti, 0 danni subiti
- The Avoider v3: 0 HP, 0 danni inflitti, 0 danni subiti
Grazie per le tue risposte! Dato che ci sono solo 4 Scriptbot, stiamo abbandonando i piani del torneo per tre partite gratuite, una su ciascuna delle mappe sottostanti. Lo scriptbot con il record di vittorie più alto vince. In caso di pareggio, entreremo nella morte improvvisa in cui vince lo scriptbot che rompe per primo il pareggio.
Il tuo compito, se scegli di accettarlo, è codificare uno Scriptbot che può attraversare una mappa ASCII e distruggere i suoi avversari. Ogni battaglia prenderà la forma di un gioco a turni di ordine casuale in cui ogni Scriptbot ha la possibilità di spendere i propri punti energia (EP) per compiere azioni. Lo script GameMaster alimenterà l'input e interpreterà l'output di ciascun Scriptbot.
Ambiente
Ogni Scriptbot è contenuto all'interno della propria directory in cui si può leggere dai map
ei stats
file e di lettura / scrittura al data
file. Il data
file può essere utilizzato per archiviare qualsiasi informazione persistente che potresti trovare utile.
Il file stats
Il stats
file contiene informazioni sui tuoi avversari ed è formattato come segue. Ogni giocatore è rappresentato su una riga separata. La prima colonna è un ID giocatore ( @
significa che). La seconda colonna è la salute di quel giocatore.
1,9HP
@,10HP
3,9HP
4,2HP
Il file della mappa
Il map
file potrebbe assomigliare a questo ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... o questo...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... o questo...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... o potrebbe apparire totalmente diverso. Ad ogni modo, i personaggi usati e il loro significato rimarranno gli stessi:
#
Un muro, invalicabile e impenetrabile.1
,2
,3
... Un numero che rappresenta un giocatore nemico. Questi numeri corrispondono all'ID giocatore nelstats
file.!
Una trappola. Gli scriptbot che si spostano in queste posizioni moriranno immediatamente.@
La posizione del tuo Scriptbot.Spazio aperto in cui sei libero di spostarti.
gameplay
Lo script GameMaster assegnerà un ordine iniziale casuale agli Scriptbot. Gli Scriptbot vengono quindi richiamati in questo ordine mentre sono ancora vivi. Gli Scriptbot hanno 10 punti vita (HP) e iniziano con 10 punti energia (EP) ogni turno, che possono usare per muovere o attaccare. All'inizio di ogni turno, uno Scriptbot guarirà per un HP, o gli verrà concesso un EP aggiuntivo se già a 10 HP (quindi correre può essere una strategia praticabile a volte).
La battaglia termina quando sopravvive un solo Scriptbot o quando sono passati 100 turni. Se più Scriptbot sono vivi alla fine di una battaglia, il loro posto viene determinato in base ai seguenti criteri:
- La maggior parte della salute.
- La maggior parte dei danni inflitti.
- La maggior parte dei danni subiti.
Scriptbot Input
GameMaster stamperà la mappa di battaglia su un file chiamato da map
cui lo Scriptbot avrà accesso da cui leggere. La mappa potrebbe assumere qualsiasi forma, quindi è importante che Scriptbot sia in grado di interpretarla. Lo Scriptbot verrà richiamato con un parametro che indica EP. Per esempio...
:> example_scriptbot.py 3
Lo Scriptbot verrà invocato fino a quando non spende tutto il suo EP o un massimo di 10 11 volte. I file delle mappe e delle statistiche vengono aggiornati prima di ogni invocazione.
Output di Scriptbot
Gli scriptbot dovrebbero mostrare le loro azioni a stout. Un elenco di possibili azioni è il seguente:
MOVE <DIRECTION> <DISTANCE>
Costa 1 PE per
DISTANCE
. IlMOVE
comando sposta il tuo Scriptbot sulla mappa. Se c'è qualcosa nel modo in cui un muro o un altro Scriptbot, GameMaster sposta il tuo Scriptbot il più lontano possibile. SeDISTANCE
viene fornito un EP superiore al rimanente di Scriptbot, GameMaster sposta lo Scriptbot fino a quando il suo EP non si esaurisce.DIRECTION
potranno essere qualsiasi direzione bussola diN
,E
,S
, oW
.PUSH <DIRECTION> <DISTANCE>
Costa 1 PE per
DISTANCE
. IlPUSH
comando abilita uno Scriptbot a spostare un altro Scriptbot. Lo Scriptbot che emette il comando deve essere direttamente accanto allo Scriptbot inviato. Entrambi gli Scriptbot si sposteranno nella direzione indicata se non c'è un oggetto che blocca lo Scriptbot che viene spinto.DIRECTION
eDISTANCE
sono gli stessi delMOVE
comando.ATTACK <DIRECTION>
Costa un PE. Il
ATTACK
comando infligge 1 danno a qualsiasi Scriptbot direttamente accanto allo Scriptbot di emissione e nella direzione specificata.DIRECTION
è lo stesso delMOVE
comando.PASS
Termina il tuo turno.
Lingue supportate
Per mantenere questo ragionevole per me, accetterò le seguenti lingue:
- Giava
- Node.js
- Pitone
- PHP
Sei limitato alle librerie che sono comunemente impacchettate con le tue lingue fuori dalla scatola. Per favore non farmi individuare librerie oscure per far funzionare il tuo codice.
Presentazione e valutazione
Pubblica il tuo codice sorgente Scriptbot qui sotto e dagli un bel nome! Elenca anche la versione della lingua utilizzata. Tutti gli Scriptbot saranno esaminati per i tomfoolery, quindi si prega di commentare bene e non offuscare il codice.
Puoi inviare più di una voce, ma ti preghiamo di renderle completamente uniche e non versioni della stessa voce. Ad esempio, potresti voler codificare un bot Zerg Rush e un bot Gorilla Warfare. Va bene. Non pubblicare Zerg Rush v1, Zerg Rush v2, ecc.
Il 7 novembre raccoglierò tutte le risposte e quelle che supereranno la revisione iniziale verranno aggiunte a una parentesi del torneo. Il campione ottiene la risposta accettata. La staffa ideale è mostrata di seguito. Dal momento che probabilmente non ci saranno esattamente 16 voci, alcune parentesi potrebbero finire per essere solo tre o anche due robot. Proverò a rendere la staffa il più equa possibile. Eventuali favoritismi necessari (nel caso in cui sia necessaria una settimana di arrivederci) saranno dati ai robot che sono stati presentati per primi.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Q & A
Sono sicuro di aver perso alcuni dettagli, quindi sentiti libero di fare domande!
Possiamo fidarci che un file di mappa è sempre circondato da # simboli? In caso contrario, cosa succede nel caso in cui un bot tenti di uscire dalla mappa? - BrainSteel
Sì, la mappa sarà sempre delimitata da # e il tuo Scriptbot inizierà all'interno di questi limiti.
Se non è presente alcun bot nella direzione specificata in un comando PUSH, come funziona il comando? - BrainSteel
Il GameMaster non farà nulla, verrà speso zero EP e lo Scriptbot verrà richiamato di nuovo.
Si accumulano EP inutilizzati? - feersum
No. Ogni Scriptbot inizierà il round / turn con 10 EP. Qualsiasi EP non speso andrà sprecato.
Penso di averlo, ma solo per chiarire: con i robot A e B, è l'ordine degli eventi A @ 10EP-> SPOSTA MAPPA_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP-> ATTACCO ... o A @ 10EP-> SPOSTA A @ 9EP-> ATTACCO ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? In altre parole, tutte le azioni in un ciclo di query controller-bot sono atomiche? Se è così, perché il loop? Perché non restituire un singolo file con tutte le azioni da completare? Altrimenti i robot dovranno scrivere i propri file di stato per tenere traccia delle sequenze multi-azione. Il file della mappa / delle statistiche sarà valido solo prima della prima azione. - COTO
Il tuo secondo esempio è vicino, ma non del tutto giusto. Durante un turno, Scriptbot viene invocato ripetutamente fino a quando non viene speso il loro EP, o un massimo di 11 volte. I file delle mappe e delle statistiche vengono aggiornati prima di ogni invocazione. Il ciclo è utile nel caso in cui un bot fornisca un output non valido. GameMaster gestirà l'output non valido e coinvolgerà nuovamente il bot, dando al bot la possibilità di correggere l'errore.
rilascerete lo script GameMaster per il test? - IchBinKeinBaum
Lo script GameMaster non verrà rilasciato. Ti incoraggio a creare una mappa e un file delle statistiche per testare il comportamento del tuo bot.
Se robotA inserisce robotB in una trappola, a robotA vengono accreditati punti "danno inflitto" pari all'attuale salute di robotB? - Mike Sweeney
Sì, è una buona idea. Ad un bot verranno assegnati punti di danno pari alla salute di qualsiasi bot che viene inserito in una trappola.
#
e il tuo Scriptbot inizierà all'interno di questi limiti.
map
file è sempre circondato da#
simboli? In caso contrario, cosa succede nel caso in cui un bot tenti di uscire dalla mappa?