Vous êtes un point entreprenant qui souhaite augmenter les terres sous son contrôle. C’est très simple: quittez votre territoire actuel et revenez dans votre pays. Tous les éléments de cette boucle vous appartiennent maintenant. Mais il ya un hic. Si un autre point trouve votre boucle et la traverse, vous mourrez.
Si vous ne l'avez pas déjà essayé, allez à Splix.io et essayez un jeu. Utilisez les touches fléchées pour contrôler votre mouvement.
GIF
Crédit: http://splix.io/
Détails
Tous les joueurs commencent à des positions aléatoires sur un tableau 200x200. (Je me réserve le droit de changer cela :). Vous aurez un certain nombre de mouvements pour accumuler le plus grand nombre de points possible. Les points sont comptés par:
- Le nombre de joueurs que vous avez tués fois 300
- La quantité de terre que vous possédez à la fin du tour
Cela soulève le point que d'autres peuvent voler votre terre. S'ils commencent une boucle qui coupe une partie de votre terre, ils peuvent la réclamer. Si vous mourez pendant le tour, vous perdez tous les points pour ce tour.
Chaque tour a un groupe de joueurs choisi au hasard (maximum 5 joueurs uniques) (sujet à changement). Chaque joueur participe à un nombre égal de tours. Le score final de votre bot est déterminé par son score moyen par match. Chaque jeu consiste en 2000 tours (également sujets à changement). Tous les robots bougent en même temps.
Cas de décès
Tête mégot
Les deux joueurs meurent quand ils se font la tête. Cela reste vrai même lorsque les deux joueurs sont au bord de leur espace.
Cependant, lorsqu'un seul joueur est sur son terrain, l'autre joueur meurt.
Ligne croisée
Dans ce cas, seul le joueur violet meurt.
Vous ne pouvez pas franchir votre propre ligne.
Sortir du tableau
Si un joueur tente de quitter le tableau, il mourra et perdra tous les points.
Zone de capture
Un joueur capturera une zone quand il aura une piste et qu'il rentrera dans son propre pays.
Le rouge remplit entre les deux lignes rouges. Le seul cas où un joueur ne remplit pas est lorsqu'un autre joueur est dans la boucle. Pour être clair, cela ne s'applique que lorsque l'autre joueur est lui-même dans la boucle, pas seulement la terre qui lui appartient. Un joueur peut capturer un terrain d'une autre personne. Si un joueur ne peut pas remplir la zone entourée par sa piste, la piste est convertie directement en terrain normal. Si le joueur à l'intérieur de la boucle d'atterrissage d'un autre joueur meurt, la zone dans cette boucle est remplie. Chaque fois qu'un joueur meurt, le tableau est réexaminé pour une zone pouvant être remplie.
Détails du contrôleur
Le contrôleur est ici . Il est très similaire au jeu original, mais de petites modifications ont été apportées pour que cela corresponde mieux à KotH et pour des raisons techniques. Il est construit avec @NathanMerrill de bibliothèque KotHComm , et avec une aide substantielle de @NathanMerrill ainsi. S'il vous plaît laissez-moi savoir de tous les bugs que vous trouverez dans le contrôleur dans la salle de discussion . Pour être cohérent avec KotHComm, j'ai utilisé des collections Eclipse dans tout le contrôleur, mais les robots peuvent être écrits en utilisant uniquement la bibliothèque Java Collections.
Tout est emballé dans un uberjar sur la page des versions de github . Pour l'utiliser, téléchargez-le et joignez-le à votre projet afin de pouvoir l'utiliser automatiquement (instructions pour IntelliJ , Eclipse ). Pour tester vos soumissions, vous exécutez le pot avec java -jar SplixKoTH-all.jar -d path\to\submissions\folder
. Assurez-vous qu’un sous path\to\submissions\folder
-dossier est nommé java
et placez-y tous vos fichiers. N'utilisez pas de noms de paquet dans vos robots (bien que cela puisse être possible avec KotHComm, c'est juste un peu plus compliqué). Pour voir toutes les options, utilisez --help
. Pour charger tous les robots, utilisez --question-id 126815
.
Écrire un bot
Pour commencer à écrire un bot, vous devez faire une extension SplixPlayer
.
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- C'est ici que vous décidez quel mouvement vous voulez que votre bot fasse. Ne doit pas retourner null.
HiddenPlayer getThisHidden()
- Obtenez la
HiddenPlayer
version dethis
. Utile pour comparer votre bot au tableau.
- Obtenez la
enum Direction
- Valeurs
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
- Obtenez le
Direction
que vous obtiendriez si vous faites un virage à gauche.
- Obtenez le
Direction RightTurn()
- Obtenez ce
Direction
que vous obtiendriez si vous faisiez un virage à droite.
- Obtenez ce
ReadOnlyBoard
C'est la classe où vous accédez au tableau. Vous pouvez soit obtenir une vue locale (20x20) du tableau avec les positions des joueurs affichées, soit une vue globale (le tableau entier) avec uniquement les informations sur les détenteurs et les positions sur le plateau. C'est aussi où vous obtenez votre position.
SquareRegion getBounds()
- Récupère la taille du tableau.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- Obtenez une carte globale du conseil.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
- Identique à
getGlobal()
, sauf qu’il est limité à une zone de 20x20 autour de votre lecteur et qu’il indique les positions du joueur.
- Identique à
Point2D getPosition(SplixPlayer me)
- Obtenez la position de votre joueur. Utiliser comme
board.getPosition(this)
.
- Obtenez la position de votre joueur. Utiliser comme
Point2D getSelfPosition(ReadOnlyBoard)
- Obtenez votre position sur le tableau. Usage:
Point2D mypos = getSelfPosition(board)
- Obtenez votre position sur le tableau. Usage:
ReadOnlyGame
ReadOnlyGame
ne donne accès qu’au nombre de tours restants dans le jeu int getRemainingIterations()
.
ReadOnlySplixPoint
HiddenPlayer getClaimer()
- Obtenir la
HiddenPlayer
version de qui revendique un point - réclamant = une traînée.
- Obtenir la
HiddenPlayer getOwner()
- Obtenez qui possède un point.
HiddenPlayer getWhosOnSpot()
- Si le joueur est positionné sur ce point, retournez la version cachée de celui-ci. Ne fonctionne que dans
getLocal()
.
- Si le joueur est positionné sur ce point, retournez la version cachée de celui-ci. Ne fonctionne que dans
Point2D
Contrairement aux autres classes ici, Point2D
est contenu dans la bibliothèque KotHComm.com.nmerrill.kothcomm.game.maps.Point2D
Point2D(int x, int y)
int getX()
int getY()
Point2D moveX(int x)
Point2D moveY(int y)
Point2D wrapX(int maxX)
- Enveloppez la
x
valeur pour qu'elle soit dans la plage demaxX
.
- Enveloppez la
Point2D wrapY(int maxY)
- Enveloppez la
y
valeur pour qu'elle soit dans la plage demaxY
.
- Enveloppez la
int cartesianDistance(Point2D other)
- Cela se traduit par le nombre de tours qu'il faudrait au joueur pour passer d'un point a à un point b.
Soutien Clojure
Le compilateur Clojure est fourni avec le SplixKoTH-all.jar
, vous pouvez donc utiliser Clojure pour votre bot! Reportez-vous à mon random_bot
pour voir comment l'utiliser.
Déboguer un bot
Le contrôleur est livré avec un débogueur pour aider à tester les stratégies. Pour le démarrer, lancez le pot avec le--gui
option.
Pour attacher le débogueur à votre pot, suivez ces instructions pour IntelliJ, ou ces instructions pour Eclipse (version Eclipse non testé).
Si vous utilisez un débogueur avec votre code, vous pouvez l'utiliser pour visualiser ce que votre bot voit. Définissez un point d'arrêt au début de makeMove
votre bot et assurez-vous qu'il ne met en pause que le thread en cours. Ensuite, cliquez sur le bouton de démarrage de l'interface utilisateur et parcourez votre code.
Maintenant, pour tout mettre ensemble:
Running Bots
Pour exécuter vos robots avec d'autres, vous devez exécuter le fichier jar sur la page des versions. Voici une liste de drapeaux:
--iterations
(-i
) <=int
(par défaut500
)- Spécifiez le nombre de jeux à exécuter.
--test-bot
(-t
) <=String
- Exécutez uniquement les jeux dans lesquels le bot est inclus.
--directory
(-d
) <= Chemin- Le répertoire dans lequel exécuter les soumissions. Utilisez ceci pour lancer vos robots. Assurez-vous que vos robots sont dans un sous-dossier du chemin nommé
java
.
- Le répertoire dans lequel exécuter les soumissions. Utilisez ceci pour lancer vos robots. Assurez-vous que vos robots sont dans un sous-dossier du chemin nommé
--question-id
(-q
) <=int
(utiliser seulement126815
)- Téléchargez et compilez les autres soumissions à partir du site.
--random-seed
(-r
) <=int
(la valeur par défaut est un nombre aléatoire)- Donnez une graine au coureur afin que les robots qui utilisent aléatoire puissent voir les résultats reproduits.
--gui
(-g
)- Exécutez le débogueur ui au lieu de lancer un tournoi. Mieux utilisé avec
--test-bot
.
- Exécutez le débogueur ui au lieu de lancer un tournoi. Mieux utilisé avec
--multi-thread
(-m
) <=boolean
(défauttrue
)- Exécuter un tournoi en mode multi-thread. Cela permet d'obtenir un résultat plus rapide si votre ordinateur possède plusieurs cœurs.
--thread-count
(-c
) <=int
(défaut4
)- Nombre de threads à exécuter si le multi-thread est autorisé.
--help
(-h
)- Imprimez un message d'aide semblable à celui-ci.
Pour exécuter toutes les soumissions sur cette page, utilisez java -jar SplixKoTH-all.jar -q 126815
.
Formater votre message
Pour vous assurer que le contrôleur peut télécharger tous les robots, vous devez suivre ce format.
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
De même, n'utilisez pas de déclaration de package.
Tableau de bord
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
S'il vous plaît laissez-moi savoir si une partie des règles ne sont pas claires, ou si vous trouvez des erreurs dans le contrôleur dans la salle de discussion .
S'amuser!
la source
Réponses:
ImNotACoward, Java
Ce bot est un expert en survie
lâche. S'il n'y a pas d'ennemi à proximité, il réclame une partie de la terre. Si la boucle d'un autre joueur peut être atteinte en toute sécurité, ilpoignarde l'autre joueur dans le dos etengage l'autre joueur dans un duel. Si l’autre joueur ne peut pas être attaqué en toute sécurité, il prend lafuite eteffectue une retraite stratégique sur son propre terrain.la source
TrapBot, Java
C'est peut-être le bot le plus simple. Tout ce qu’il fait, c’est tracer le bord du tableau, se doubler pour réduire le risque de se faire tuer.
la source
random_bot, Clojure
C'est RandomBot , mais je devais m'en tenir aux conventions de nommage, et certains problèmes m'empêchent d'utiliser le trait d'union dans le nom, donc les soulignements règnent! Le
make-move
fn renvoie une vec avec le premier élément queDirection
vous souhaitez déplacer et le second étant l'état que vous souhaitez vous transmettre lors du prochain tour. N'utilisez pas d'atomes externes, car ce code peut exécuter plusieurs jeux en parallèle.la source
HunterBot, Java
L'un des robots les plus élémentaires. Il cherche des endroits pour tuer les autres sur le tableau et suivra le chemin le plus court possible pour atteindre une position de mise à mort. S'il se trouve en dehors de son territoire, il effectuera des mouvements aléatoires jusqu'à ce qu'il dispose d'une autre ouverture pour tuer un autre joueur. Il a une certaine logique pour l'empêcher de courir sur lui-même, et lorsque tous les autres joueurs sont morts, il retourne à son domicile. Une fois à la maison, ça se passe sur une petite place.
la source