Rocket Bots
Nous sommes en 3024. Les gens sont devenus une ressource trop rare pour risquer la guerre, alors le combat est passé aux robots. Votre tâche consiste à construire un bot pas comme les autres, dont les roquettes feront pleuvoir la destruction sur vos ennemis et abattront toutes les menaces entrantes.
Gameplay
Bots
Le gameplay se déroule sur une grille 10x15. Votre bot est situé sur le bord inférieur et dispose de trois emplacements aux points 6,7 et 8 de la grille. Votre adversaire est situé en haut de la grille, avec trois emplacements directement en face du vôtre.
Fusées
Depuis n'importe lequel de ces emplacements, vous pouvez tirer une fusée, en supposant que l'emplacement n'a pas été détruit. Une fusée se compose d'une liste de directions qui lui est donnée lors de sa création, et une fois tirée, ces directions ne peuvent plus être modifiées. À chaque tour, la fusée consommera le haut de la liste et se déplacera dans cette direction. Les roquettes se déplacent simultanément. Si deux roquettes se terminent sur la même tuile, elles exploseront toutes les deux. Si une fusée manque de commandes, elle explosera. Si une fusée manque de carburant, après 100 mouvements, elle explosera. Lorsqu'une fusée explose, elle reste dans cette tuile pendant 5 tours, provoquant ainsi l'explosion de toute autre fusée qui s'y déplace.
Remarque: En raison du mouvement simultané, deux roquettes peuvent se croiser sans exploser, tant qu'elles ne se terminent pas toutes les deux un tour dans la même tuile.
Objectif
Le but de chaque match est de détruire les emplacements de vos adversaires tout en gardant le vôtre en vie. Une fusée peut être tirée à partir de n'importe quel emplacement en direct que vous possédez, et on vous donne un chemin que vous avez désigné avant de tirer. Vous tirez une roquette tous les deux tours, ce qui signifie que les roquettes se déplaceront deux fois avant de pouvoir en tirer une autre. Un duel dure 200 tours, ou jusqu'à ce qu'un emplacement de bots soit détruit.
Notation
À la fin du match, vous obtenez un point pour chaque emplacement en direct que vous avez, et un point pour chaque emplacement d'adversaire que vous avez détruit. Cela signifie que c'est un jeu à somme nulle, et 6 points seront attribués à chaque match.
Un tournoi à la ronde sera exécuté afin que chaque bot se fasse face une fois. Si des robots utilisent des RNG, chaque match sera à la place de 1000 duels.
la mise en oeuvre
Le code du concours peut être trouvé ici: https://github.com/Cain93/RocketBots
Chaque soumission devrait prolonger la Bot
classe. Vous devez remplacer la fireRocket
méthode. Cette méthode reçoit une grille de roquettes Rocket[][]
, qui représente le plateau de jeu. Vous êtes toujours situé au bas de la grille, avec des fentes à des endroits [-1][6]
, [-1][7]
, [-1][8]
. Sur la grille, les spots inoccupés seront représentés avec null
. Si une fusée existe dans une tuile, vous pouvez identifier à qui elle appartient en accédant au dis
terrain. "^" est votre fusée et "v" est votre adversaire.
Vous devez renvoyer une LinkedList of Integers qui donne les instructions pour votre fusée. Pour vous déplacer vers le haut, utilisez 0. Pour vous déplacer vers le haut et vers la droite, utilisez 1, juste à droite, utilisez 2, etc. jusqu'à 7 pour le haut et la gauche. La fusée se déplacera dans l'ordre dans lequel vous appuyez sur Entiers. Par exemple, le code suivant fera avancer la fusée de quelques tours, zigzaguer de quelques tours puis exploser.
LinkedList<Integer> moves = new LinkedList<Integer>();
moves.push(0);
moves.push(0);
moves.push(0);
moves.push(1);
moves.push(7);
moves.push(1);
moves.push(7);
Pour changer de quel emplacement tirer la fusée, changez de curSlot
champ. 0 est votre emplacement le plus à gauche et 2 est votre emplacement le plus à droite. Pour vérifier si un emplacement est détruit, utilisez getSlot(int slotNumber)
.
Si une fusée termine un tour sur un emplacement, cet emplacement sera détruit. Vous n'avez pas besoin de faire exploser manuellement la fusée.
Remarque: les roquettes apparaissent à l'emplacement de l'emplacement de tir, mais se déplaceront une fois avant que les collisions ne soient évaluées. Donc, si vous tirez une fusée depuis l'emplacement 0 et que le premier coup est à droite (2), vous détruirez votre propre emplacement central. Cependant, monter et droite (1) est un mouvement sûr.
Si vous souhaitez nommer votre bot, remplacez la name()
méthode.
Les bots seront reconstruits pour chaque duel, donc toutes les variables statiques seront réinitialisées.
Bonne chance!
Que vos fusées volent véritablement et que vos adversaires ne soient que des morceaux de métal fumants.
Allusion:
Exploser délibérément des roquettes pour créer des explosions est un moyen plus facile de défendre que d'essayer d'abattre des roquettes adverses.
Exemple Bot
package bots;
import java.util.LinkedList;
import mechanics.*;
public class SimpleBot extends Bot {
public String name(){
return "Simple";
}
public LinkedList<Integer> fireRocket(Rocket[][] g){
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i = 0; i < 12; i++){
l.push(0);
}
return l;
}
}
Les scores
Partitions de 6-24
Simple: 900
Zigzagoon: 3654
Wall-E: 3606
Tortoise: 2248
3 Shot: 2334
HatTrickBot: 4287
Sniper: 2973
SideShooter: 2491
Terminator: 4835
StraightShot: 3378
Defender: 4570
MoreDakka: 4324
Réponses:
Défenseur
Le défenseur utilise un nouveau type de défense: les roquettes patrouillent devant les emplacements. Cela donne un énorme avantage, car les fusées vivent pendant 100 tours au lieu de 5 tours (comme des explosions).
la source
Zigzagoon
Les fentes extérieures vont (légèrement) larges, puis se dirigent vers l'avant et reviennent vers les fentes ennemies. La fente du milieu tire un motif en zigzag au milieu.
Tous les deux tours (3 tours), il passe en mode défense et fait exploser quelques roquettes près de mes propres emplacements. Les fusées en mode attaque les contournent ensuite. Rien d'extraordinaire, juste quelque chose pour lancer le concours.
la source
Terminator
Je suis fier de vous présenter Terminator !!!
Chaque fusée se déplace loin à gauche / à droite du milieu et revient sur un emplacement ennemi. Tous les deux tours, une fusée de défense est lancée directement et explose près de la fente pour la protéger.
la source
HatTrickBot
J'ai eu DoubleTapBot pour CodeBot 3, qui frappait deux fois sur un tour, voici HatTrickBot: Frapper tous les 3 spots en même temps!
Il est toujours possible d'empêcher une fusée de frapper si vous savez où elle tombera. Mais je ne pense pas qu'il y ait beaucoup de bots qui pourront protéger leurs emplacements contre une attaque à 3 roquettes.
Soit dit en passant, oui, c'est horrible de voir un tel autre avec un interrupteur répété. J'aurais pu créer un var pour allumer des valeurs uniques pour chaque combinaison de l'état des emplacements et du turnConter. Mais ce serait plus difficile à lire (il faudrait que je garde le sens des valeurs dans un commentaire ... ennuyeux!) :)
la source
Tortue
Si je protège toutes mes bases, j'ai 3 points. Les bases ne peuvent être attaquées qu'à partir de 5 emplacements si je comprends bien la grille. La fusée dure 5 tours sur le terrain ...
Ce bot utilise tout cela pour atteindre son objectif: survivre avec au moins 50% des points dans la poche. Il tire 3 roquettes, puis se couvre
la source
SideShooter
Premiers tirs via la première tourelle (la plus à droite) de deux manières différentes. Ensuite, il tire via la dernière tourelle (la plus à gauche) de deux manières différentes. Ensuite, il fait un "mur" avec la deuxième tourelle (au milieu) en faisant exploser des roquettes devant chaque tourelle. Ce processus se répète.
Si le jeu dure plus de 30 tours, SideShooter s'ennuie et change légèrement. Au lieu de faire un "mur" avec la deuxième tourelle (centrale), il tire droit. Les autres tourelles se comportent de la même manière.
la source
do...while
déclaration fait une boucle infinie ...Tireur d'élite
Sniper bloque d'abord ses deux côtés puis commence à tirer droit.
la source
Trois coups
Nous avons eu des clichés étranges en vol. Pas de véritable défense, mais le schéma est tel qu'il sera difficile d'obtenir un coup de feu après cette grêle bizarre de missiles. (ou c'est l'idée. cela ne fonctionnera probablement pas.)
Remarque
la source
PlusDakka
Dakka tire dans cinq directions sans s'arrêter (jusqu'à ce que les tourelles soient détruites par d'autres missiles).
la source
StraightShot
Tirez juste dessus.
la source
Voici ma propre entrée
WallE
Tire des roquettes décalées et construit des murs sur ses bords et son centre. Après 100 tours, commence à cibler l'emplacement du milieu.
la source