Il tuo gentile vicino, Doctor Tree, ti ha appena dato tre creature magiche chiamate Codémon. C'è un torneo di battaglia nella vicina città di Colorville. Sei il migliore, come nessuno lo è mai stato?
Panoramica
Questo è un torneo di battaglia. Ogni giocatore controlla una squadra di tre mostri e l'obiettivo è quello di eliminare (uccidere) l'altra squadra. Ci sono 100 round, con punti assegnati per vittorie e pareggi. Vince la squadra con più punti!
mostri
Un Codémon è una piccola creatura complicata. Esistono cinque tipi (elementi) tra cui scegliere, tre statistiche e tre slot di spostamento su ciascuno.
tipi
A ciascun Codémon viene assegnato un tipo. I cinque tipi sono Normale, Psichico, Fuoco, Acqua ed Erba. Ognuno ha i suoi punti di forza e di debolezza. Il danno si basa sulla seguente tabella:
I numeri sono moltiplicatori di danno. Ad esempio, Acqua che attacca il fuoco ha un modificatore 0,5 (metà danno), mentre raddoppia l'erba che attacca il fuoco (2).
Statistiche
Ogni mostro ha tre statistiche che determinano le sue abilità di battaglia. L'attacco aumenta il danno che fa. La difesa riduce il danno che subisce. La velocità gli consente di muoversi prima di quelli con velocità inferiore.
Ogni mostro ha un valore iniziale di 50 per ogni stat e un massimo di 100. Quando crei i tuoi mostri, sarai in grado di assegnare 80 punti stat aggiuntivi (ciascuno). Ricorda che nessuna singola statistica può superare 100. Quindi, potresti avere una distribuzione 100/80/50, 90/80/60 o 65/65/100, ma 120/50/60 è illegale. Qualsiasi squadra con statistiche illegali viene squalificata. Non è necessario utilizzare tutti gli 80 punti, ma probabilmente non si dovrebbe andare con il minimo 50/50/50.
Puoi anche considerare HP come stat, ma ogni Codémon ha 100 HP non modificabili. Quando HP scende a zero, non sono in grado di continuare a combattere. HP viene ricaricato a 100 prima di ogni battaglia.
Si sposta
Ogni mostro conosce tre mosse di battaglia. I tre scelti devono essere distinti, quindi nessun Punch / Punch / Punch.
Ci sono 15 mosse, tre per ogni tipo. Ogni tipo ha un attacco diretto, un attacco più debole con un effetto e una sola mossa effetto.
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
si riferisce al tipo di mossa. power
è il suo potere sorprendente. uses
indica quante volte può essere usato per battaglia ( -
è illimitato). usable
mostra da quali tipi può essere utilizzato (ad esempio, Punch non può essere assegnato a un tipo Psichico, poiché non esiste P
). effect
mostra quali effetti hanno le mosse. C'è una probabilità del 75% di ogni effetto, tranne Heal, che funziona sempre.
Per gli effetti che cambiano le statistiche di un mostro, gli effetti possono essere raggruppati . Ad esempio, l'uso di Weaken due volte può ridurre l'attacco del tuo avversario a 0,64 di efficacia. Gli effetti che non cambiano le statistiche di un mostro (Sleep, Burn, ecc.) Non si accumulano .
Il sonno mette l'avversario a dormire, con una probabilità del 60% di svegliarsi all'inizio di ogni turno. Nessuna azione sarà intrapresa dai mostri addormentati.
Bruciare danneggia l'avversario di 10 HP alla fine di ogni turno quando è attivo . Il veleno funziona in modo simile, ma ne prende una quantità crescente ogni turno. Al primo turno, è 5 e guadagna 5 ogni turno successivo. Quindi, al quarto turno, sarà dannoso per 20. Questi sono danni piatti, non influenzati dal tipo di mostro o soggetti a bonus.
La confusione può far attaccare un mostro stesso invece di fare ciò che gli è stato detto di fare. Questo attacco ha il potere 10 e ha una probabilità del 30% di accadere in un dato turno.
Per essere chiari, gli effetti durano fino alla fine della battaglia (tranne Sleep, come notato sopra).
Le mosse ricevono anche un potenziamento del 20% in potenza se utilizzate da un mostro del tipo corrispondente. Ad esempio, un mostro Erba che usa Vine è potenziato, mentre usando Punch non lo è.
Statistiche segrete
Le statistiche e il tipo (ma non le mosse) di ogni mostro sono di dominio pubblico. I tuoi avversari saranno in grado di vedere cosa stanno combattendo, al fine di scegliere l'azione migliore. Tuttavia, ci sono anche dei bonus disponibili che sono nascosti.
In particolare, dopo ogni due battaglie, ti verrà assegnato un punto stat "bonus" per ogni mostro della tua squadra. I punti vengono assegnati a tutti i mostri, vivi o morti, vincitori o perdenti. Puoi assegnarlo a qualunque delle tre statistiche che scegli. Non puoi impilarli su un singolo mostro; ogni mostro ne prende uno ogni volta. Questi punti sono immuni al limite di 100. Dal momento che ci saranno 100 round di battaglia, questo significa che puoi ottenere una singola statistica fino a 149 se assegni tutti i tuoi bonus. Ancora una volta, l'avversario vedrà solo le tue statistiche "base", quindi più sei lontano nel torneo, più la loro conoscenza diverge dalla verità.
Battaglia
La battaglia si svolge tra squadre di tre, con una attiva su ogni squadra alla volta. All'inizio, ti verrà mostrato il team dell'avversario e ti verrà chiesto di scegliere quale mostro sarà il tuo primo giocatore "attivo".
Successivamente, le svolte avvengono con i seguenti passaggi:
- Switch: si verificano gli switch monster obbligatori (se presenti)
- Scegli l'azione di battaglia
- Switch: qualsiasi switch monster opzionale (scelto come azione di battaglia) ha luogo
- Controllo del sonno: possibilità di svegliarsi dal sonno
- Attacco 1: se possibile, il mostro più veloce usa la sua mossa selezionata
- Attacco 2: se possibile, l'altro mostro usa la sua mossa selezionata
- Danno dell'effetto: applica danni da ustione / avvelenamento ai mostri viventi
"Speedier" indica il mostro con la velocità più alta. Se entrambe le statistiche di velocità sono uguali, viene scelto dal lancio della moneta PRNG ogni turno.
Alla fine di ogni turno in cui muore il tuo mostro attivo, ti verrà chiesto di scegliere un nuovo attivo. Puoi anche scegliere di cambiare mostri attivi come mossa per ogni turno (a condizione che tu ne abbia più di uno vivo). Ancora una volta, se cambi come mossa, non farai una mossa di battaglia in quel turno.
I mostri non vengono "elaborati" quando inattivi. Ciò significa che non subiscono danni da bruciatura / avvelenamento, i segnalini veleno non si accumulano, nessuna veglia dal sonno, ecc. Nessun effetto viene rimosso o modificato quando si cambia . Questo non è l' altro gioco di battaglie tra mostri. Se esci con l'attacco sollevato e bruciato, saranno ancora lì quando torni.
Il danno da effetto si verifica indipendentemente dal fatto che tu uccida o meno il tuo avversario attivo. In questo modo, i membri di entrambe le squadre possono morire in un solo turno.
Quando una squadra esaurisce i mostri utilizzabili, perde. Se entrambe le squadre si esauriscono nello stesso turno, è un pareggio. Se la battaglia dura 1000 turni, è un pareggio.
La formula per determinare il danno è:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
e effDefense
sono le statistiche efficaci per i mostri. L'attacco efficace si ottiene aggiungendo Attacco e Attacco Bonus, quindi moltiplicando (per 0,8 o 1,25) se qualche effetto lo altera. Ricorda che questi effetti possono accumularsi.
Il danno può essere 0 solo quando il modificatore del tipo è 0 (Normale <--> Psichico) o la Potenza della mossa è 0 (Guarigione, Brucia, ecc.). Altrimenti il minimo viene applicato a 1.
Torneo
I tornei durano per 100 round. In ogni round, le squadre vengono mescolate e accoppiate l'una contro l'altra in modo casuale. Se c'è un numero dispari di squadre, il rimanente riceve un arrivederci (segna come pareggio). Vincere una battaglia guadagna 2 punti per la squadra , i legami valgono 1 e nulla perde. Vince la squadra con il maggior numero di punti alla fine!
Se le squadre sono in parità, un torneo con solo le squadre in parità per il primo posto avrà luogo per determinare l'ordine dei tiebreaker.
Protocollo
Il controller invierà al tuo programma uno dei quattro comandi. Il primo carattere determina il tipo di comando, con i dati che seguono se necessario.
Il tuo programma accetterà il comando come argomento e risponderà su STDOUT entro un secondo . Non rimanere in vita ascoltando STDIN, non ci sarà. Ogni comando genererà un nuovo processo.
È possibile scrivere dati / stato su disco. Metti tutti i file in una sottocartella con lo stesso nome del tuo team. Non scrivere più di 32 kilobyte di dati, altrimenti verrai squalificato. I dati persistono tra i round, ma verranno cancellati tra i tornei.
comandi
Dati del team
Questo viene inviato una volta all'inizio del torneo per registrare la tua squadra. La tua risposta dovrebbe essere costante , non diversa per ogni torneo.
Query:
T
Risposta:
name|member0|member1|member2
name
è una stringa con il nome della tua squadra. Si prega di utilizzare solo alfanumerico, per facilitare l'analisi. memberN
è una stringa membro, che fornisce i dettagli di ciascun mostro:
Stringa membro:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
Ancora una volta, "name" è una stringa, questa volta con il nome di questo mostro. typeid
è il suo tipo. Gli ID di tipo sono nell'ordine mostrato nella tabella sopra, con Normale = 0 e Grass = 4.
I prossimi tre campi sono le tue statistiche di base. Tieni presente i limiti descritti nella sezione delle statistiche sopra.
Le ultime tre sono le mosse del tuo mostro. Gli ID sono mostrati nella tabella delle mosse sopra.
Un esempio di risposta dei dati del team può apparire così:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
Qualsiasi squadra che rispedisca qui dati inutili, non formattati o illegali non parteciperà fino a quando non verrà risolto.
Scegli Attivo
Viene inviato all'inizio di ogni battaglia e quando un mostro muore e deve essere cambiato.
Query:
C#battleState
battleState
mostra lo stato della battaglia attuale. Abbi pazienza qui, è brutto:
yourTeamState#theirTeamState
Dove XteamState
appare:
name:activeSlot|member0state|member1state|member2state
activeSlot
mostra quale mostro è attualmente attivo (0-2). Gli stati membri hanno due gusti. Se è la tua squadra, fornisce ulteriori informazioni. Così,
Il tuo membroXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
Il loro membroXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
è semplicemente un identificatore intero che puoi usare per tenere traccia dei mostri se non ti piace usare name
.
attack:defense:speed
sono le tue statistiche di base .
poisonedturns
ti dice per quanti turni sei stato avvelenato.
moveCountX
indica quanti usi ti rimangono per ogni mossa. Se 0, non può essere utilizzato. Per mosse illimitate, questo sarà negativo.
bonus(stat)
è la quantità di punti bonus assegnati a ciascuna statistica.
effectid
è un elenco di effetti di dimensioni variabili che sono stati applicati al tuo mostro. Ci sarà non essere una finale :
sulla corda, se ci sono effetti attivi presenti o meno. Se sono presenti effetti sovrapposti, verranno visualizzati come effetti multipli nell'elenco.
Gli ID effetto sono:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
Risposta:
memberSlot
L'unica risposta richiesta è un singolo numero 0,1,2, che indica quale membro si desidera essere attivo. Questo deve essere un membro in grado di combattere. Non rispedire 1
se il membro 1 è morto.
Azione di battaglia
Ad ogni turno, devi decidere cosa fare.
Query:
A#battleState
Il battleState
qui è esattamente come descritto sopra.
Risposta:
Per usare una mossa, rispedire lo slot in cui si trova la mossa. Ad esempio, se ho assegnato Punch allo slot 0, l'invio 0
esegue Punch.
Per passare a un altro membro, invia lo slot del membro più dieci . Quindi per passare al membro 2, invia 12
.
Qualunque cosa non in [0,1,2,10,11,12] è considerata non valida e non comporterà alcuna azione in questo turno.
Statistiche bonus
Dopo ogni due battaglie, ricevi un punto bonus segreto per ogni membro della squadra.
Query:
B#yourTeamState
Lo stato della tua squadra è lo stesso mostrato sopra, non farmi ripetere.
Risposta:
stat0:stat1:stat2
La tua risposta rappresenterà quale stat aumentare per ciascun membro del team. L'attacco è 0, la difesa è 1, la velocità è 2.
Quindi, per aumentare la velocità del membro, l'attacco del membro due e la difesa del membro tre, risponderesti con:
2:0:1
controllore
Il controller può essere trovato su BitBucket: https: //Geobits@bitbucket.org/Geobits/codemon.git
Basta lanciare tutti i file della classe compilati, i contributi e il player.conf in una cartella ed eseguire.
Viene chiamata la classe principale del controller Tournament
. L'utilizzo è:
java Tournament [LOG_LEVEL]
I livelli di registro da 0 a 4 forniscono informazioni crescenti. Il livello 0 esegue il torneo in silenzio e fornisce solo i risultati, mentre il livello 3 fornisce commenti passo-passo. Il livello 4 è l'output di debug.
Puoi aggiungere invii al torneo in players.conf
Aggiungi semplicemente la stringa della riga di comando necessaria per eseguire il programma, uno per riga. Le righe che iniziano con #
sono commenti.
Nel tuo post, includi il comando che dovrò aggiungere al mio players.conf
e tutti i passaggi della compilazione (se necessario).
È inclusa una squadra fittizia composta da tutti i membri normali con le tre mosse normali. Scelgono le mosse in modo casuale e hanno statistiche terribili. Divertiti a picchiarli.
Regole varie
Non è possibile leggere o scrivere su risorse esterne (tranne nella propria sottocartella, fino a 32 kB come indicato sopra).
La tua squadra deve andare al torneo "alla cieca". Ciò significa che non puoi analizzare la fonte di altre persone per capire cosa farà una specifica squadra / mostro in una determinata situazione. Puoi analizzare le mosse / le statistiche del tuo avversario e tenere traccia dell'avanzamento del torneo, ma non puoi inserire queste informazioni.
Non interferire con altri processi / invii. Non invocarli, usare reflection per ottenere i loro dati, ecc. Non scherzare con il mio computer. Basta non provarlo. Questo è a mia discrezione. I trasgressori potrebbero essere esclusi da ingressi futuri.
I concorrenti sono limitati a un massimo di due iscrizioni. Se invii di più, segnerò solo i primi due inviati. Se si desidera revocarne uno, eliminarlo.
Le voci non possono esistere esclusivamente per sostenere altre voci. Inoltre, non puoi provare a squalificare indirettamente altri concorrenti (ad esempio, usando un nome di squadra di 27 milioni di caratteri per i giocatori DQ che provano a scrivere questo su disco). Ogni sottomissione dovrebbe giocare per vincere per il proprio merito.
Il tuo programma può generare un massimo di un processo figlio alla volta (discendenti totali, non diretti). Entrambi i processi principali e secondari devono terminare direttamente dopo aver fornito l'output. Ad ogni modo, assicurati di non andare oltre il timeout.
Il torneo si terrà sul mio computer con Ubuntu in esecuzione con un processore Intel i7 3770K.
risultati
Questi sono i risultati degli attuali giocatori. È molto vicino tra i migliori contendenti e sto pensando di aumentare il numero di round fino a 500 (e regolare la spaziatura dei punti bonus in modo che corrispondano). Eventuali obiezioni, commenti?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Risultati play-by-play completi su Google Drive
bye
per un numero irregolare di concorrenti e verrebbe assicurato che le coppie di match siano eque e distribuite uniformemente.
n^2
invece di n
. Con solo gli attuali 7 concorrenti e 100 round, sono 2100 battaglie (contro 300 così com'è e 1500 con 500 round). Peggiora solo con l'ingresso di più voci. Potrei ridimensionare il numero di round, ma esito a farlo a causa della variabilità intrinseca (per quanto riguarda gli stati esp), e avere un multiplo di 50 (per punti bonus) è più facile.