Vous connaissez probablement le Game of Life de Conway , le célèbre automate cellulaire inventé par le mathématicien John Conway. La vie est un ensemble de règles qui, ensemble, vous permettent de simuler un tableau de cellules en deux dimensions. Les règles déterminent quelles cellules du tableau vivent et lesquelles meurent. Avec un peu d'imagination, on pourrait dire que Life est un jeu à joueur nul: un jeu dont l'objectif est de trouver des modèles de comportement intéressant, comme le célèbre planeur.
Un jeu à zéro joueur ... Jusqu'à aujourd'hui. Vous devez écrire un programme qui joue le jeu de la vie - et le joue pour gagner, à la manière du roi de la colline. Votre adversaire (singulier) essaie bien sûr de faire de même. Le gagnant est soit le dernier bot avec une cellule vivante, soit le joueur avec le plus de cellules vivantes après 10000 générations.
Regles du jeu
Les règles sont presque les mêmes que pour la vie normale (B3 / S23):
- Une cellule vivante avec moins de deux voisins amis meurt de faim.
- Une cellule vivante avec deux ou trois voisins amicaux survit.
- Une cellule vivante avec plus de trois voisins amis décède de la surpopulation.
- Une cellule morte avec exactement trois voisins du même joueur s'anime pour se battre pour ce joueur s'il n'y a pas de voisins ennemis .
... mais après chaque génération, vous et votre adversaire avez la possibilité d'intervenir. Vous pouvez vous réveiller avec un maximum de 30 cellules pour vous battre. (Qui va en premier est décidé par le serveur.)
Le tableau est un carré (x, y) de cellules. Toutes les places sont initialement mortes. Les frontières ne s’enroulent pas (ce n’est pas un monde en forme de tore) et sont définitivement mortes.
Ceci est un concours dans l'esprit de Battlebots et Core Wars . Il y a un serveur central qui exécutera des bots et on peut le trouver ici
Protocole
Le serveur d'arène parle un protocole JSON simple communiqué via argv
Où Values est une chaîne encodée JSON
y_size
: le nombre maximal de carreaux avant leur disparitionx_size
: le nombre maximum de coords de carreaux avant qu'ils ne disparaissenttick_id
: le numéro de tick actuelboard
: un dictionnaire avec des clés sous la forme '(y, x)' et des valeurs sous la formebot_id
(int)bot_id
: les tuiles dans le tableau avec cet identifiant sont à vous
Exemple:
{"y_size":2000,"x_size":2000,"board":{},"bot_id":1,"tick_id":1}
Dire au serveur votre choix:
- Envoyez au serveur une liste de tuiles pour qu’elles adoptent votre couleur.
- Seuls ceux qui sont vides seront changés
- Format de liste de coordonnées imbriquées
[[0,0], [0,1], [100,22]...]
NOTE: Votre bot n'a pas du tout besoin de mettre à jour les tuiles - le serveur se met à jour lui-même
Règlement du concours
- Si votre implémentation ne respecte pas le protocole, son tour sera perdu; Le serveur n'assume aucun changement d'état
- Vous n'êtes pas autorisé à tirer volontairement parti d'une défaillance du serveur d'arène.
- Demandez à votre IA de décider de se déplacer dans un moment sain. S'il vous plaît envoyer votre prochain déménagement aussi rapidement que raisonnablement possible.
- Enfin, s'il vous plaît soyez gentil avec le serveur. C'est là pour votre plaisir.
- Ne pas suivre ces règles peut entraîner une disqualification.
- En cas d'égalité, les deux joueurs ont 1 victoire ajoutée à leur total
Faire fonctionner le contrôleur vous-même
La source du contrôleur peut être trouvée ici . Il y a 2 manières de faire fonctionner le contrôleur:
- Mode compétition (terminal)
- Mis en place avec
python3 get_answers.py
- Lancez une compétition tous contre tous avec chaque bot en le confrontant les uns avec les autres.
- Mis en place avec
- Mode de test (GUI)
- Courir
python3 nice_gui.py
- Cliquez sur
Pull Answers
- Si vous souhaitez ajouter votre propre réponse avant de la publier, cliquez dessus
File -> Add manual answer
, recherchez le fichier et choisissez la langue dans laquelle il est écrit. - Si votre langue n'est pas présente, envoyez-moi une requête ping et essayez de l'installer sur le serveur. Je l'exécuterai (les instructions d'installation et d'exécution seraient également utiles!)
- Choisissez 2 robots pour vous opposer
- Cliquez sur
Run
- Regarde le jeu...
- Courir
- Installation
- Requiert python3
- get_answers requiert bs4 et html5lib
- Le contrôleur requiert un moyen d’exécuter des fichiers .sh (MinGW sur Windows)
Notation
Le bot avec le plus grand nombre de victoires à partir du 12/07/2016
12 juillet14/07/2016
(le 14 juillet, ne sait pas comment gérer un bot) gagne.
Vous pouvez demander de l'aide avec le contrôleur / interface graphique dans cette salle de discussion.
Cette question est en développement depuis 2014 et était la question la plus votée dans le bac à sable. Un merci tout spécial à Wander Nauta (auteur et concept original), au chat PPCG (commentaires et aide) et à tous ceux qui ont fait des commentaires dans le post Sandbox (plus de commentaires).
Réponses:
Python 3, Exploder
Met de petits exploseurs autour de la place, sans se soucier de savoir s'il y a déjà un bloc là-bas.
la source
Ruby, InterruptingBlockMaker
Au lieu d'initialiser des planeurs comme le TrainingBot, il tente de créer une machine de commutation de blocs 5x5, comme mentionné sur Wikipedia, à un point aléatoire du labyrinthe. Ensuite, avec les activations restantes, il ne fait que trouver des points ennemis et tente de recouvrir vos cellules de la zone voisine afin de les empêcher de se développer et de gâcher leurs schémas. Vos cellules mourront à la prochaine génération, mais peut-être ont-elles également cessé de croître pour ralentir votre adversaire!
v2: légèrement optimisé (?) pour essayer de minimiser les délais.
v3: Code d'interruption optimisé pour pré-échantillonner un sous-ensemble de blocs actifs avant de rejeter nos propres emplacements de cellule, afin d'éviter des délais d'attente plus longs au détriment de l'efficacité des attaques de cellules d'interruption.
la source
bot_score
indiquent le nombre de victoires de chaque bot sur d'autres botsPython 2, TrainingBot
Parce que tout le monde en a besoin!
la source
Java, troll bot
Troll Bot y a réfléchi et se rend compte qu'il ne s'intéresse pas à l'ennemi. En fait, il demande à ces usines de produire davantage de ses gars au hasard sur la carte. Après un moment, il se rendit compte que les cellules supplémentaires sont mieux utilisées dans les touffes. Ces blocs de quatre cellules vont rester ensemble et arrêter les planeurs dans leurs traces! Il ne pense pas qu'il se bat juste. En outre, il est un grand partisan de la programmation orientée objet verbeuse. Le troll suppose également que les coordonnées sont au format y, x, et il demande à être testé. Il suffit de le placer dans un fichier appelé "TrollBot.java" et il sera configuré!
la source
Python 3, RandomBot
Ce bot a du mal à prendre des décisions intelligentes, mais il sait au moins ne pas essayer de placer les choses au-dessus d’autres choses. Il créera au hasard des planeurs, des bateaux, des blocs C / 2 Orthagonal et des blocs 2x2 avec des orientations variées, afin de garantir qu’ils ne se chevauchent pas avec quelque chose d’autre, allié ou ennemi.
Ce bot n'a pas été testé, vu que je reçois toutes sortes d'erreurs lorsque j'essaie d'exécuter l'interface graphique. De plus, j'ai utilisé TrainingBot comme base et juste pour éditer, donc toute similitude de code est probablement due à cela.
la source
print(sys.argv[1])
ligne 3, qui gâche la sortie (le simulateur attend uniquement la chaîne de coordonnées que vous voulez réactiver). De plus, il manque un paren de clôture à la dernière ligne de votre programme.html5lib
, puis ne trouvant pas le dossier contenant tous les robots (je devais changer le code pour les deux), et depuis lors, le fonctionnement de l'un des deux robots Python a entraîné un code de retour non nul. 1.Python, GuyWithAGun
C'est un gars, il a une arme à feu; il est fou. Il se débarrasse des armes à feu de planeur partout sans se soucier de ce que font les autres
la source
Python 3, SquareBot
Place des carrés partout - peut-être
Les carrés sont des objets statiques dans la vie, ils ne bougent pas. Donc, si je place suffisamment d'objets inertes autour de la place, les planeurs et les explosions que d'autres créent peuvent éventuellement être bloqués, ou du moins amortis.
-Adapté de TrainingBot
Bien que j'ai du mal à le tester
la source