introduzione
In questo gioco, i giocatori usano i loro eserciti per combattere gli eserciti di altri giocatori, catturare territori e diventare l'ultimo uomo in piedi. Ad ogni turno, i giocatori ricevono un numero base di eserciti da usare a loro disposizione. Catturando territori in alcune regioni, tuttavia, i giocatori possono aumentare questo numero per dare loro un potenziale vantaggio più avanti nel gioco. (Questo è essenzialmente lo stesso di Warlight ).
Tutti i bot dovrebbero essere scritti in Java, C o C ++ (includerei altri linguaggi ma non ho il software o l'esperienza per loro). Non è necessario per la tua presentazione estendere una classe e puoi creare funzioni, classi, interfacce o qualsiasi altra cosa sia necessaria e utilizzare qualsiasi pacchetto o classe nelle API standard . Se stai pensando di creare una classe o un'interfaccia, ti preghiamo di considerare l'utilizzo di una classe interna o di un'interfaccia interna.
Non tentare di modificare a livello di programmazione il controller o altri invii in questa competizione.
gameplay
Panoramica
Un array bidimensionale 10x10 simulerà la scheda, ogni elemento / cella rappresenta un "territorio". Ci saranno 20 round e fino a 1000 turni per round. Ogni turno, i giocatori schiereranno prima gli eserciti che hanno in uno dei territori di loro proprietà, quindi avranno l'opportunità di trasportare i loro eserciti nei territori vicini nel tentativo di catturare i territori degli avversari attaccando gli eserciti in essi. I giocatori devono schierare tutti i loro eserciti, ma non devono spostarli se lo desiderano.
Attaccare / trasferire eserciti
Se il giocatore lo desidera, può inviare eserciti da un territorio a uno degli otto adiacenti. Il tabellone "si avvolge", ovvero se il territorio di un giocatore si trova da un lato, gli eserciti da esso possono essere trasferiti in un territorio adiacente dall'altro lato. Quando si spostano eserciti da un territorio, in quel territorio dovrebbe essere rimasto almeno un esercito. Ad esempio, se un territorio contiene cinque eserciti, non più di quattro possono essere spostati in un territorio diverso; se un territorio ne contiene uno, quell'esercito non può muoversi.
Se un giocatore invia n
eserciti da un territorio a un altro di sua proprietà, quel territorio riceveràn
eserciti.
Supponiamo che un giocatore mandi n
eserciti dal suo territorio in un territorio avversario con o
eserciti in esso. o
diminuirà di n * .6
arrotondato all'intero più vicino; tuttavia, allo stesso tempo, n
diminuirà di o * .7
arrotondato all'intero più vicino. Si applicano le seguenti regole relative all'acquisizione o meno del territorio avversario:
- Se
o
raggiunge zero ANDn
è maggiore di 0, il giocatore prenderà il controllo del territorio, che avràn
eserciti in esso. - Se entrambi
n
eo
diventano zero,o
verranno automaticamente impostati su 1 e il territorio non verrà acquisito. - Se
o
rimane maggiore di 0, il numero di eserciti nel territorio del giocatore aumenterà din
e il territorio avversario non verrà catturato.
bonus
Verrà scelto un gruppo di territori per rappresentare un bonus; se un giocatore possiede tutti i territori che fanno parte del gruppo, quel giocatore riceverà un numero extra di eserciti per turno.
I bonus hanno numeri identificativi per indicare quelli e valori diversi che rappresentano il numero extra di eserciti che un giocatore può ricevere. Ad ogni round, il valore di un bonus sarà un numero casuale compreso tra 5 e 10, inclusi, e dieci bonus saranno disponibili sul campo, ciascuno con dieci territori inclusi nel bonus.
Ad esempio, se un giocatore che riceve 5 eserciti per turno possiede tutti i territori che compongono un bonus con un valore di 8, il giocatore riceverà 13 eserciti nel turno successivo e nei turni successivi. Se, tuttavia, il giocatore perde uno o più dei territori che compongono il bonus, riceverà solo 5 eserciti per turno.
Input Output
Il programma dovrebbe ricevere input tramite argomenti della riga di comando, che avranno il seguente formato:
[id] [armies] [territories (yours and all adjacent ones)] [bonuses] ["X" (if first turn)]
id
earmies
sono entrambi numeri interi.id
è il tuo ID edarmies
è il numero di eserciti che devi schierare nei tuoi territori. Devi schierare tutti gli eserciti che ti vengono dati, né più né meno.territories
è una serie di stringhe che rappresentano i territori che possiedi e i territori che non possiedi che sono adiacenti al tuo. Le stringhe sono in questo formato:[row],[col],[bonus id],[player id],[armies]
row
ecol
indica la riga e la colonna del tabellone in cui si trova il territorio,bonus id
è l'id del bonus di cui fa parte questo territorio,player id
è l'id del giocatore proprietario del territorio edarmies
è il numero di eserciti contenuti nel territorio. Questi sono tutti numeribonuses
è una serie di stringhe che rappresentano i bonus sul tabellone che puoi sfruttare. Le stringhe sono in questo formato:[id],[armies],[territories left]
id
è l'id del bonus,armies
è il numero di eserciti extra che puoi ricevere possedendo tutti i territori in questo bonus edterritories left
è il numero di territori nel bonus che devi catturare per ricevere gli eserciti extra.
Nota che un quinto argomento, una "X", apparirà se è il primo turno di un round e può essere utilizzato per motivi di convenienza.
Un esempio di input al primo turno:
0 5 "7,6,7,-1,2 8,7,7,-1,2 7,7,7,0,5 6,6,7,-1,2 8,8,9,-1,2 6,7,7,-1,2 7,8,9,-1,2 6,8,9,-1,2 8,6,7,-1,2" "0,5,10 1,5,10 2,9,10 3,9,10 4,9,10 5,5,10 6,5,10 7,6,9 8,7,10 9,7,10" X
Il programma deve generare due stringhe separate da una nuova riga, la prima delle quali elenca le righe e le colonne dei territori in cui si desidera aggiungere eserciti e il numero di eserciti che si desidera aggiungere ad esso, e il secondo dei quali elenca le righe e colonne dei territori in cui si desidera inviare eserciti e il numero di eserciti che si desidera inviare. L'output può contenere spazi finali.
Per specificare un territorio in cui aggiungere eserciti, l'output deve seguire questo formato:
[row],[col],[armies]
row
e col
sono la riga e la colonna del tabellone in cui si trova il territorio in cui si desidera aggiungere eserciti, ed armies
è il numero di eserciti che si desidera aggiungere al territorio.
Per specificare a quali territori vuoi inviare eserciti, il tuo output dovrebbe seguire questo formato:
[srow],[scol],[drow],[dcol],[armies]
srow
e scol
sono la riga e la colonna del tabellone da cui si trova il territorio da cui vuoi trasportare eserciti, drow
e dcol
sono la riga e la colonna del tabellone da dove si trova il territorio in cui vuoi inviare gli eserciti, earmies
è il numero di eserciti che vuoi inviare . Nota che se non vuoi spostare alcun esercito, il tuo programma dovrebbe stampare uno spazio.
Un output di esempio può essere questo:
0,0,5
0,0,0,1,3 0,0,1,0,3 0,0,1,1,3
In questo caso, il giocatore schiera cinque eserciti sul territorio a 0,0 e sposta tre eserciti da 0,0 a 0,1; tre da 0,0 a 1,0; e tre da 0,0 a 1,1.
Giri e turni
All'inizio di ogni round, a tutti i giocatori verrà assegnato un territorio situato in un punto casuale del tabellone (è possibile che due o più giocatori inizino uno accanto all'altro). Anche i territori che compongono un bonus possono cambiare.
Nel primo turno, ogni giocatore avrà un territorio contenente cinque eserciti e riceverà cinque eserciti che potranno usare (questo è il minimo che possono ricevere). Tutti gli altri territori saranno di proprietà di NPC che non attaccano; ognuno di questi contiene due eserciti e ha un ID di-1
.
Ad ogni turno verrà eseguito il programma e verranno raccolti entrambi i pezzi di output. Il controller applicherà immediatamente il primo output, aggiungendo eserciti ai territori; tuttavia, il controller attenderà fino a quando tutti i giocatori avranno dato il loro secondo pezzo di output, i loro comandi di attacco / trasferimento. Una volta che questo è stato completato, i comandi verranno mescolati casualmente e quindi eseguiti. Il tuo programma deve fornire l'output e terminare in un secondo o meno per partecipare al turno.
Punteggio e vincita
Per ogni dato round, se rimane un giocatore, quel giocatore guadagnerà 100 punti. Altrimenti, se passano 1000 turni e ci sono ancora più giocatori, i 100 punti saranno divisi equamente tra i giocatori rimanenti (ovvero 3 giocatori rimanenti producono 33 punti ciascuno). Qualunque giocatore avrà il maggior numero di punti alla fine dei 20 round vincerà.
Inseriti
Il tuo post dovrebbe includere un nome per il bot, la lingua in cui è scritto, una breve descrizione e il codice utilizzato per eseguirlo. Un bot di esempio verrà pubblicato qui come esempio e verrà utilizzato nel concorso. Puoi inviarne quanti ne desideri.
Altro
Il programma può creare, scrivere e leggere da un file purché il nome del file corrisponda al nome utilizzato per l'invio. Questi file verranno eliminati prima dell'inizio di un torneo ma non tra un round e l'altro.
Il tuo turno verrà saltato se:
- sei eliminato (non hai territori);
- il tuo programma non stampa nulla;
- il programma non termina entro un secondo;
- dispieghi troppi eserciti nei tuoi territori (dispiegare eserciti in territori che non possiedi conterà ai fini di questo) o troppi eserciti; o
- l'output provoca un'eccezione al controller.
Il comando di attacco / trasferimento non verrà eseguito se:
- il tuo programma non fornisce un output corretto;
- scegli un territorio per spostare eserciti da quello non tuo;
- muovi zero o un numero negativo di eserciti dal tuo territorio;
- sposti troppi eserciti dal tuo territorio; o
- scegli un territorio a cui inviare eserciti che non sia adiacente al territorio da cui hai scelto di spostare eserciti.
Puoi trovare il controller e un bot di esempio qui . Il bot parteciperà al gioco, ma probabilmente non vincerà alcun round (a meno che non lo sia davvero fortunato).
risultati
Eseguendo il controller dopo aver inviato una correzione di bug, WeSwarm continua ad essere una forza da non sottovalutare. Ci vorrà un robot con una grande strategia per avere una possibilità contro di esso.
As of 25-08-15, 04:40 UTC
1: WeSwarm 1420
2: java Player 120
java LandGrab 120
java Hermit 120
java Castler 120
6: java RandomHalver 80
Avviso!
È stato corretto un bug scoperto da Zsw che faceva sì che i territori che dispiegavano i loro eserciti dopo che altri avessero un potenziale vantaggio nel gioco. È stata inviata una modifica al controller, quindi si prega di utilizzare la versione esistente trovata utilizzando il link sopra.