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