Questa sfida è finita. Per vedere i punteggi finali dei concorrenti, clicca qui
In questa sfida, ogni invio è un bot. Ogni bot dovrebbe essere una funzione Javascript. I robot combatteranno per ottenere il massimo valore totale in oro. L'oro può essere coltivato o guadagnato uccidendo altri robot e viene utilizzato per migliorare la cura, l'attacco, la protezione e l'agricoltura.
Obbiettivo:
In un numero di round che contiene fino a 1000 turni (termina quando rimane solo un bot), il bot con il valore totale più alto (la somma di tutto l'oro ottenuto) è il vincitore.
Giri:
Ad ogni turno, ogni bot che è vivo (> 0 HP) verrà eseguito una volta. Può restituire una mossa, che può essere una delle seguenti:
- Guarigione: riacquista HP
- Attacco: rimuove HP da un altro bot
- Scudo: difende dagli attacchi successivi
- Stordimento: salta il turno successivo di un altro robot
- Fattoria: guadagna oro al costo di HP
- Aggiornamento: migliora alcune mosse
Tutti i robot restituiranno la loro mossa prima che qualcuno venga eseguito, quindi uno stordimento, una cura, un attacco, uno scudo, ecc. Non influenzeranno alcun robot che si muove successivamente in quel turno. Ad esempio, se il Bot A stordisce il Bot B e il Bot B è dopo il Bot A nell'ordine del turno, il Bot B si sposterà più tardi nello stesso turno e lo stordimento si verificherà nel turno successivo.
Combattimento, allevamento e potenziamento:
Ogni bot ha un massimo di 100 HP e un UID assegnato tra 0 e 99. Questo UID cambia dopo ogni round ed è il modo in cui i robot si tengono reciprocamente traccia.
La guarigione è una delle mosse più semplici, aggiungendo una quantità di HP determinata dal suo livello (inizia da 5 HP). Un bot non può curare oltre 100 HP.
Attaccare un bot con il suo UID è un'altra mossa possibile, con un danno base di 5 HP al livello 0. I robot possono anche essere storditi, saltando il loro turno successivo, che utilizza anche gli UID.
I robot hanno HP scudo aggiuntivo, che non ha limiti. Questo scudo HP assorbirà i danni dagli attacchi diretti di altri robot e viene aggiunto dalla schermatura. Al livello 0, la schermatura aggiunge 5 HP scudo.
L'agricoltura guadagnerà 5 monete d'oro al livello 0, al costo di 2 HP. Questo 2 HP non può essere schermato. L'unico uso dell'oro (oltre alla vincita) è migliorare le mosse. La cura, l'attacco e la protezione hanno un valore base di 5 HP e l'agricoltura inizia con 5 monete d'oro. Ognuna di quelle mosse ha livelli individuali, che iniziano da 0. Queste formule determineranno il valore in HP o oro di una mossa, dove L è il livello:
- Guarigione:
L + 5
- attaccare:
1.25L + 5
- Schermatura:
1.5L + 5
- agricoltura:
2L + 5
Il costo per aggiornare qualsiasi mossa è lo stesso per un certo livello, ed è determinato da 2.5L² + 2.5L + 10
dove L è il livello attuale. Un bot può usare la funzione cost(currentLevel)
come scorciatoia per determinarlo.
I robot iniziano con 25 monete d'oro, consentendo loro di aggiornare rapidamente due mosse al livello 1 o una mossa al livello 2. Questo oro iniziale non conta per un valore totale dei robot. Uccidere un robot ti dà metà del suo valore totale in oro, arrotondato per eccesso, e se due robot ne uccidono un altro nello stesso turno, entrambi ottengono la ricompensa.
Input Output:
Per comunicare con il controller, il valore di ritorno della funzione viene utilizzato per inviare informazioni di spostamento. Uno di questi dovrebbe essere restituito:
- Guarire:
heal()
- Attacco:
attack(uid)
- Scudo:
shield()
- Stordire:
stun(uid)
- Azienda agricola:
farm()
- Aggiornamento:
upgrade("heal" / "attack" / "shield" / "farm")
Per saltare un turno (non fare nulla), non restituire nulla o restituire un valore errato.
Per ottenere il numero di svolta corrente (inizia da 1), utilizzare turn()
.
Gli argomenti della tua funzione includeranno informazioni sul tuo bot, UID di altri bot e archiviazione tra turni. Il primo argomento è un oggetto con le seguenti proprietà: uid
, hp
, gold
, e shield
. Queste sono copie delle informazioni correnti del tuo bot. V'è anche un oggetto annidato levels
, con i numeri di livello heal
, attack
, shield
, e farm
.
Il secondo argomento è una matrice già mescolato di tutti i bot vivi diversa dalla propria, formattato come un oggetto contenente proprietà uid
, hp
(più schermo), worth
e attack
(livello di attacco). Il terzo argomento è un oggetto vuoto che può essere utilizzato per l'archiviazione tra turni.
Robot di esempio:
Questo bot verrà coltivato fino a quando non può aggiornare il suo attacco al livello 5, quindi attaccherà un bot casuale ogni turno fino a quando non muore (o vince). Non molto efficace a causa della mancanza di guarigione / protezione.
function freeTestBotA(me, others, storage) {
if (me.levels.attack < 5) {
if (me.gold < cost(me.levels.attack))
return farm();
return upgrade("attack");
}
return attack(others[0].uid);
}
Questo bot ha due modalità: offensiva e difensiva. Stordirà un robot a caso o curerà quando è in modalità difensiva e attaccherà o proteggerà quando sarà in modalità offensiva. Tenterà di aggiornare i suoi attacchi quando possibile.
function freeTestBotB(me, others, storage) {
if (me.gold >= cost(me.levels.attack))
return upgrade("attack");
if (me.hp < 50)
if (Math.random() < 0.5)
return stun(others[0].uid);
else
return heal();
else
if (Math.random() < 0.5)
return attack(others[0].uid);
else
return shield();
}
Regole:
- Scappatoie standard vietate
- I robot non possono leggere, modificare o aggiungere variabili al di fuori del loro ambito di applicazione, non possono tentare di imbrogliare e non possono chiamare alcuna funzione definita dal controller o DOM
- Il valore di ritorno deve essere errato o una delle uscite della funzione sopra
- I robot non devono essere progettati per targetizzare un bot specifico, ma possono essere progettati per trarre vantaggio da strategie comuni
- I robot non possono attaccarsi (scoperti a causa di un commento di @Ness)
- I robot devono essere sufficientemente diversi da qualsiasi altro robot da poter essere ragionevolmente considerati voci separate
- Il teaming non è ora consentito
- Il controller può essere trovato qui
- chatroom
Nuovo debug del controller:
Utilizzando il file gold-battle-log.js
, è possibile impostare il valore della debug
proprietà di un bot botData
su 0 (nessuna registrazione), 1 (spostamento del registro) o 2 (spostamento del registro, hp, gold, livelli, ecc.)
La sfida termina alle 1700 UTC di venerdì 9 agosto
[closed]
alla fine è probabile che gli spettatori casuali saltino oltre la lettura della mia sfida poiché presumono che sia di bassa qualità o fuori tema.