sheesh, è davvero il 4? Per tutti voi vecchietti, la sfida principale è la stessa, ma stiamo usando Java invece di un linguaggio personalizzato. Ecco le tre ultime sfide di CodeBot , nel caso tu sia interessato.
L'obiettivo di CodeBots è rendere il tuo bot il più virale possibile . Ogni bot porta una bandiera e devi assicurarti che la tua bandiera sia ovunque .
API
I robot seguiranno un "protocollo" standardizzato e procederanno in modo sincrono attraverso i seguenti passaggi:
IPAddress selectMessageRecipient()
consente a un bot di scegliere a chi desidera inviare un messaggio "amichevole".Message sendMessage()
consente a un bot di scegliere il contenuto del messaggio che invierà.processMessage(IPAddress, Message)
viene chiamato per ogni messaggio ricevuto da un bot.FunctionType selectFunctionToBlock()
impedisce a una funzione di essere sovrascritta per il turno corrente. Vedi il passaggio 7.IPAddress selectAttackTarget()
consente a un bot di scegliere chi desidera DDOS. Un attacco DDOS ha esito positivo se il bot viene preso di mira da 3 bot contemporaneamente. Se un attacco ha esito positivo, ciascuno degli attaccanti può eseguire i passaggi 6 e 7.readData(ReadonlyBot)
consente a un bot di leggere i dati memorizzati nel bot vulnerabile.FunctionType selectFunctionToReplace()
è il nocciolo di questa sfida . Puoi selezionare 1 funzione (delle 8 elencate qui) per copiare dal tuo bot al loro bot. Quindi, la tua funzione verrà chiamata al posto della loro . Se più robot selezionano la stessa funzione, una casuale avrà esito positivo.String getFlag()
viene chiamato alla fine del gioco e dovrebbe restituire una stringa unica alla tua presentazione. La tua funzione dovrebbe sempre restituire la stessa stringa. La presentazione con il maggior numero di bandiere alla fine del gioco vince.
Conservazione
Hai 3 forme di archiviazione, una rubrica , un registro e una variabile . Queste forme di archiviazione sono locali al bot su cui è in esecuzione la funzione (quindi se la funzione viene copiata, il contenuto di ciascuno di questi oggetti sarà diverso). Tutti questi oggetti possono essere modificati o cancellati manualmente. Per ottenere questi oggetti, hai un getter nella tua classe (ad es getLog()
.).
L'AddressBook memorizza un elenco di IndirizzoIP , ciascuno con un'AddressType , che permette di classificare i diversi tipi di indirizzi. La Rubrica conterrà sempre almeno 1 indirizzo (se viene cancellato, ne verrà aggiunto uno casuale). Non è possibile cancellare la Rubrica per ottenere più indirizzi IP .
Il registro memorizza un elenco di tutte le azioni intraprese, nonché i dati relativi all'azione. Include anche una cronologia di tutti gli attacchi riusciti (anche se non sai quali funzioni hanno sovrascritto)
L' oggetto Variabili consente di memorizzare variabili stringa associate a un nome stringa. All'inizio del gioco, le variabili conterranno una singola variabile, ID
che contiene un ID generato casualmente che è unico per il tuo tipo di bot.
Hai anche altre funzioni di accesso:
int getTurnNumber()
restituisce un numero intero con il turno correntebool functionsMatch(ReadonlyBot, FunctionType)
verifica se la funzione di ReadonlyBot corrisponde alla tuaIPAddress personalAddress()
restituisce il tuo indirizzo IP
Come implementare
- È possibile ottenere il codice da Github
- Aggiungi il tuo bot alla
\bots
cartella, quindi aggiungi un riferimento al tuo bot incontroller\CodeBotFactory.java
- Il tuo bot deve estendere
codebots.bot.CodeBot
ocodebots.bots.DefaultCodeBot
- È necessario Java 8 se si desidera eseguire il controller.
- Puoi eseguire il codice (supponendo che tu sia nella
/src
cartella) usandojavac codebots\*.java
per compilare, quindijava codebots.Main
per eseguire. - Si può non avere alcun variabili membro non costanti nella classe
- La riflessione non è consentita.
- Non sono consentite forme di comunicazione tra bot (di tipo uguale o diverso) al di fuori dei metodi sopra elencati.
- Sono ammessi bot stupidi e / o suicidi, ma tutti i robot dovrebbero essere funzionalmente diversi dalle voci esistenti.
- Se vuoi casualità nel tuo bot, usa
getRandom()
- Prova a mantenere il tuo codice efficiente. Ho trascorso molto tempo a profilare e velocizzare il controller.
I punteggi
105.2501 Expelliarmus!
104.5803 Sto aiutando!
104.2746 Chi sono io?
103.8529 Bot
stupido
103.2028 Sostituitore 102.7045 Caos
102.4046 Bot eremita 102.2849
Swarmer
100.5598 Bot casuale ti ama
99.966 Trust in Trust!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423 Solo il tuo amichevole robot di consegna della posta di quartiere.
89.4645 null