Ce défi est terminé. Pour voir les résultats finaux des concurrents, cliquez ici
Dans ce défi, chaque soumission correspond à un bot. Chaque bot devrait être une fonction Javascript. Les bots vont se battre pour obtenir la plus haute valeur totale en or. L’or peut être cultivé ou gagné en tuant d’autres bots et est utilisé pour améliorer la guérison, les attaques, le blindage et l’agriculture.
Objectif:
Sur un nombre de tours contenant jusqu'à 1000 tours (se termine lorsqu'il ne reste qu'un seul bot), c'est le bot qui a la valeur totale la plus élevée (la somme de tout l'or obtenu) est le gagnant.
Se tourne:
A chaque tour, chaque bot en vie (> 0 HP) sera exécuté une fois. Il peut retourner un mouvement, qui peut être l'un des suivants:
- Heal: Regagne HP
- Attaque: supprime HP d'un autre bot
- Bouclier: se défend contre les attaques ultérieures
- Stun: Saute le prochain tour d'un autre bot
- Ferme: Gagne de l'or au prix de HP
- Mise à niveau: améliorer certains mouvements
Tous les robots renverront leur mouvement avant que tous ne soient exécutés. Par conséquent, un étourdissement, des soins, une attaque, un bouclier, etc., n'affecteront pas les robots se déplaçant plus tard dans ce tour. Par exemple, si le bot A étouffe le bot B, et que le bot B est après le bot A dans l'ordre du tour, le bot B continuera à se déplacer plus tard dans le même tour et l'étourdissement se produira au tour suivant.
Combat, agriculture et valorisation:
Chaque bot a un maximum de 100 HP et un UID attribué compris entre 0 et 99. Cet UID change après chaque tour et constitue le moyen utilisé par les bots pour se suivre.
La guérison est l'un des mouvements les plus simples, en ajoutant une quantité de HP déterminée par son niveau (à partir de 5 HP). Un bot ne peut pas guérir après 100 CV.
Attaquer un bot par son UID est un autre mouvement possible, avec des dégâts de base de 5 PV au niveau 0. Les bots peuvent également être assommés en sautant leur prochain tour, qui utilise également des UID.
Les robots ont un bouclier supplémentaire HP, qui n'a pas de limite. Ce bouclier HP absorbe les dégâts des attaques directes d’autres bots et s’ajoute au blindage. Au niveau 0, le blindage ajoute 5 boucliers HP.
L'agriculture gagnera 5 or au niveau 0, au prix de 2 HP. Ce 2 HP ne peut pas être blindé. La seule utilisation de l'or (au-delà de la victoire) est d'améliorer les mouvements. Les soins, les attaques et les blindages ont une valeur de base de 5 PV et l'agriculture commence à 5 or. Chacun de ces mouvements a des niveaux individuels, qui commencent à 0. Ces formules détermineront la valeur en HP ou en or d'un mouvement, où L est le niveau:
- Guérison:
L + 5
- Attaquant:
1.25L + 5
- Blindage:
1.5L + 5
- Agriculture:
2L + 5
Le coût de la mise à niveau d'un déplacement est le même pour un certain niveau et est déterminé par 2.5L² + 2.5L + 10
, où L est le niveau actuel. Un bot peut utiliser cette fonction cost(currentLevel)
comme raccourci pour le déterminer.
Les bots commencent avec 25 pièces d'or, ce qui leur permet d'améliorer rapidement soit deux mouvements au niveau 1, soit un mouvement au niveau 2. Cet or de départ ne compte pas dans la valeur totale des bots. Tuer un bot vous donne la moitié de sa valeur totale en or, arrondi, et si deux bots en tuent un au même tour, ils reçoivent tous les deux la récompense.
Entrée sortie:
Pour communiquer avec le contrôleur, la valeur de retour de la fonction est utilisée pour envoyer des informations de déplacement. L'un d'eux doit être retourné:
- Guérir:
heal()
- Attaque:
attack(uid)
- Bouclier:
shield()
- Étourdir:
stun(uid)
- Ferme:
farm()
- Améliorer:
upgrade("heal" / "attack" / "shield" / "farm")
Pour sauter un tour (ne rien faire), ne rien retourner ou une valeur de fausseté.
Pour obtenir le numéro de tour actuel (commence à 1), utilisez turn()
.
Les arguments de votre fonction incluront des informations sur votre bot, les UID d'autres bots et le stockage entre les tours. Le premier argument est un objet avec les propriétés suivantes: uid
, hp
, gold
, et shield
. Ce sont des copies des informations actuelles de votre bot. Il y a aussi un objet imbriqué levels
, avec les numéros de niveau de heal
, attack
, shield
et farm
.
Le deuxième argument est un tableau mélangé de tous les robots vivants autres que le vôtre, formatés en tant qu'objet contenant des propriétés uid
, hp
(plus un bouclier) worth
, et attack
(niveau d'attaque). Le troisième argument est un objet vide qui peut être utilisé pour le stockage entre les tours.
Exemple de robots:
Ce bot agraiera jusqu'à ce qu'il puisse augmenter son attaque au niveau 5, puis attaquera un bot aléatoire à chaque tour jusqu'à ce qu'il meure (ou gagne). Pas très efficace en raison du manque de guérison / blindage.
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);
}
Ce bot a deux modes: offensif et défensif. Il assommera un bot aléatoire ou guérira en mode défensif et il attaquera ou se protégera en mode offensif. Il tentera d'améliorer ses attaques chaque fois que possible.
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();
}
Règles:
- Les échappatoires standard sont interdites
- Les robots ne peuvent pas lire, modifier ou ajouter de variables en dehors de leur portée, ne peuvent pas tenter de tricher et ne peuvent appeler aucune fonction définie par le contrôleur ou DOM
- La valeur de retour doit être falsy ou l'une des sorties de fonction ci-dessus
- Les bots ne doivent pas être conçus pour cibler un bot spécifique, mais peuvent tirer parti des stratégies communes
- Les robots ne peuvent pas s'attaquer eux-mêmes (découverte suite à un commentaire de @Ness)
- Les robots doivent être suffisamment différents des autres robots pour pouvoir être considérés comme des entrées séparées.
- Faire équipe est maintenant interdit
- Le contrôleur peut être trouvé ici
- Tchat
Nouveau débogage de contrôleur:
À l'aide du fichier gold-battle-log.js
, vous pouvez définir la valeur de la debug
propriété d'un bot botData
sur 0 (pas de journalisation), 1 (journal se déplace) ou 2 (journal se déplace, hp, or, niveaux, etc.).
Le défi se termine à 17h00 UTC le vendredi 9 août
[closed]
à la fin, il est probable que les téléspectateurs occasionnels passeront au-dessus de ma lecture du défi car ils supposeraient que cela est de faible qualité ou hors sujet.