Sei un punto intraprendente che vuole aumentare la terra sotto il suo controllo. Questo è abbastanza semplice: viaggia fuori dalla tua attuale terra e ritorna nella tua terra e tutto in quel giro è ora di tua proprietà. Ma c'è un problema. Se qualche altro punto trova in qualche modo il tuo anello e lo attraversa, muori.
Se non l'hai ancora provato, vai su Splix.io e prova un gioco. Usa i tasti freccia per controllare i tuoi movimenti.
GIF
Attestazione: http://splix.io/
specifiche
Tutti i giocatori iniziano in posizioni casuali su una tavola 200x200. (Mi riservo il diritto di modificare questo :). Avrai un certo numero di mosse per accumulare il maggior numero di punti possibile. I punti vengono conteggiati da:
- Il numero di giocatori che hai ucciso è 300 volte
- La quantità di terra che possiedi alla fine del round
Questo porta al punto che gli altri possono rubare la tua terra. Se iniziano un circuito che interseca parte della tua terra, possono reclamarla. Se muori durante il round, perdi tutti i punti per quel round.
Ogni round ha un gruppo di giocatori selezionato casualmente (max 5 giocatori unici) (soggetto a modifiche). Ogni giocatore partecipa a un numero uguale di round. Il punteggio finale del tuo bot è determinato dal suo punteggio medio per partita. Ogni partita è composta da 2000 turni (anche soggetti a modifiche). Tutti i robot fanno le loro mosse contemporaneamente.
Casi di morte
Testa a testa
Entrambi i giocatori muoiono quando si scontrano a vicenda. Questo è ancora vero anche quando entrambi i giocatori sono al limite del loro spazio.
Tuttavia, quando solo uno dei giocatori è nella sua terra, l'altro giocatore muore.
Linea Croce
In questo caso, muore solo il giocatore viola.
Non puoi attraversare la tua linea.
Uscire dal consiglio di amministrazione
Se un giocatore tenta di uscire dal tabellone, morirà e perderà tutti i punti.
Catturare l'area
Un giocatore catturerà l'area quando ha una pista ed entra di nuovo nella sua terra.
Il rosso si riempie tra le due linee rosse. L'unico caso in cui un giocatore non si riempie è quando un altro giocatore è all'interno del loop. Per essere chiari, questo si applica solo quando l'altro giocatore è nel loop, non solo terra posseduta da lui. Un giocatore può catturare terre da un'altra persona. Se un giocatore non può riempire l'area circondata dalla sua traccia, la traccia viene convertita direttamente in terra normale. Se il giocatore all'interno del loop di terra di un altro giocatore muore, l'area in quel loop viene riempita. Ogni volta che un giocatore muore, il tabellone viene riesaminato per un'area che può essere riempita.
Dettagli del controller
Il controller è qui . È molto simile al gioco originale, ma sono state apportate piccole modifiche per renderlo più adatto a KotH e per motivi tecnici. E 'costruito con @NathanMerrill 's biblioteca KotHComm , e con l'aiuto sostanziale da @NathanMerrill pure. Per favore fatemi sapere di eventuali bug che trovate nel controller nella chat room . Per essere coerente con KotHComm, ho usato le raccolte Eclipse in tutto il controller, ma i robot possono essere scritti usando solo la libreria Collezioni Java.
Tutto è impacchettato in un uberjar nella pagina delle versioni di github . Per usarlo, scaricalo e allegalo al tuo progetto in modo da poterlo utilizzare per il completamento automatico (istruzioni per IntelliJ , Eclipse ). Per testare i tuoi invii, esegui il jar con java -jar SplixKoTH-all.jar -d path\to\submissions\folder
. Assicurati che path\to\submissions\folder
abbia un subfoler chiamato java
e posiziona lì tutti i tuoi file. Non usare i nomi dei pacchetti nei tuoi robot (anche se potrebbe essere possibile con KotHComm, è solo un po 'più problematico). Per vedere tutte le opzioni, utilizzare --help
. Per caricare tutti i robot, utilizzare --question-id 126815
.
Scrivere un bot
Per iniziare a scrivere un bot, è necessario estendere SplixPlayer
.
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- Qui è dove decidi quale mossa vuoi che il tuo bot faccia. Non deve restituire null.
HiddenPlayer getThisHidden()
- Ottieni la
HiddenPlayer
versione dithis
. Utile per confrontare il tuo bot con la scheda.
- Ottieni la
enum Direction
- Valori
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
- Ottieni
Direction
ciò che otterrai se avessi girato a sinistra.
- Ottieni
Direction RightTurn()
- Ottieni
Direction
ciò che otterrai se avessi fatto una svolta a destra.
- Ottieni
ReadOnlyBoard
Questa è la classe in cui accedi alla scheda. Puoi ottenere una vista locale (20x20) del tabellone con le posizioni dei giocatori mostrate, oppure una vista globale (l'intero tabellone) con solo le informazioni di chi possiede e rivendica le posizioni sul tabellone. Questo è anche il luogo in cui ottieni la tua posizione.
SquareRegion getBounds()
- Recupera le dimensioni della scheda.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- Ottieni una mappa globale della scheda.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
- Lo stesso
getGlobal()
, tranne per il fatto che è limitato a un'area 20x20 attorno al tuo giocatore e che mostra le posizioni del giocatore.
- Lo stesso
Point2D getPosition(SplixPlayer me)
- Ottieni la posizione del tuo giocatore. Usa come
board.getPosition(this)
.
- Ottieni la posizione del tuo giocatore. Usa come
Point2D getSelfPosition(ReadOnlyBoard)
- Ottieni la tua posizione sul tabellone. Uso:
Point2D mypos = getSelfPosition(board)
- Ottieni la tua posizione sul tabellone. Uso:
ReadOnlyGame
ReadOnlyGame
fornisce solo l'accesso al numero di turni rimasti nel gioco int getRemainingIterations()
.
ReadOnlySplixPoint
HiddenPlayer getClaimer()
- Ottieni la
HiddenPlayer
versione di chi sta rivendicando un punto - claiming = a trail.
- Ottieni la
HiddenPlayer getOwner()
- Ottieni chi possiede un punto.
HiddenPlayer getWhosOnSpot()
- Se il giocatore è posizionato su questo punto, restituiscene la versione nascosta. Funziona solo in
getLocal()
.
- Se il giocatore è posizionato su questo punto, restituiscene la versione nascosta. Funziona solo in
Point2D
A differenza delle altre classi qui, Point2D
è contenuta nella libreria KotHComm.com.nmerrill.kothcomm.game.maps.Point2D
Point2D(int x, int y)
int getX()
int getY()
Point2D moveX(int x)
Point2D moveY(int y)
Point2D wrapX(int maxX)
- Avvolgere il
x
valore per essere compreso nell'intervallo dimaxX
.
- Avvolgere il
Point2D wrapY(int maxY)
- Avvolgere il
y
valore per essere compreso nell'intervallo dimaxY
.
- Avvolgere il
int cartesianDistance(Point2D other)
- Questo si traduce in quanti turni ci vorrebbe per un giocatore per passare dal punto a al punto b.
Supporto per clojure
Il compilatore Clojure è in bundle con il SplixKoTH-all.jar
, quindi puoi usare Clojure per il tuo bot! Fare riferimento a my random_bot
per vedere come usarlo.
Debug di un bot
Il controller viene fornito con un debugger per aiutare a testare le strategie. Per avviarlo, esegui il vaso con il--gui
opzione.
Per collegare il debugger al tuo jar, segui queste istruzioni per IntelliJ o queste istruzioni per Eclipse (versione di Eclipse non testata).
Se stai usando un debugger con il tuo codice, puoi usarlo per aiutare a visualizzare ciò che sta vedendo il tuo bot. Imposta un punto di interruzione all'inizio del makeMove
tuo bot e assicurati che sospenda solo il thread corrente. Quindi, fai clic sul pulsante Start sull'interfaccia utente e passa attraverso il codice.
Ora, per mettere tutto insieme:
Esecuzione di robot
Per eseguire i tuoi robot con altri, devi eseguire il jar nella pagina dei rilasci. Ecco un elenco di flag:
--iterations
(-i
) <=int
(impostazione predefinita500
)- Specifica il numero di giochi da eseguire.
--test-bot
(-t
) <=String
- Esegui solo i giochi in cui è incluso il bot.
--directory
(-d
) <= Percorso- La directory da cui eseguire gli invii. Usa questo per eseguire i tuoi robot. Assicurati che i tuoi robot si trovino in una sottocartella del percorso indicato
java
.
- La directory da cui eseguire gli invii. Usa questo per eseguire i tuoi robot. Assicurati che i tuoi robot si trovino in una sottocartella del percorso indicato
--question-id
(-q
) <=int
(usare solo126815
)- Scarica e compila gli altri invii dal sito.
--random-seed
(-r
) <=int
(il valore predefinito è un numero casuale)- Dai un seme al corridore in modo che i robot che usano casualmente possano ottenere risultati riprodotti.
--gui
(-g
)- Esegui l'interfaccia utente del debugger invece di eseguire un torneo. Meglio usato con
--test-bot
.
- Esegui l'interfaccia utente del debugger invece di eseguire un torneo. Meglio usato con
--multi-thread
(-m
) <=boolean
(impostazione predefinitatrue
)- Esegui un torneo in modalità multi-thread. Ciò consente un risultato più veloce se il tuo computer ha più core.
--thread-count
(-c
) <=int
(impostazione predefinita4
)- Numero di thread da eseguire se è consentito il multi-thread.
--help
(-h
)- Stampa un messaggio di aiuto simile a questo.
Per eseguire tutti gli invii in questa pagina, utilizzare java -jar SplixKoTH-all.jar -q 126815
.
Formattazione del tuo post
Per garantire che il controller possa scaricare tutti i bot, è necessario seguire questo formato.
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
Inoltre, non utilizzare una dichiarazione del pacchetto.
tabellone segnapunti
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
Per favore fatemi sapere se una parte delle regole non è chiara o se trovate errori nel controller nella chat room .