Scriptbot Warz!
Les résultats sont là et Assassin est notre champion, remportant 2 des 3 matchs! Merci à tous ceux qui ont soumis leurs Scriptbots! Un merci spécial aux klaxons pour BestOpportunityBot qui a affiché un excellent cheminement et a utilisé pleinement toutes les options d'action.
Carte 1
Assassin a éliminé BestOpportunityBot dès le début et le reste du match était assez ennuyeux. Play-by-play détaillé ici.
- Assassin: 10 PV, 10 dégâts infligés, 3 dégâts subis
- L'Avoider v3: 10 HP, 0 dégâts infligés, 0 dégâts subis
- Je dois finir de manger: 10 PdV, 0 Dégâts infligés, 0 Dégâts subis
- BestOpportunityBot: 0 HP, 3 Dégâts infligés, 10 Dégâts subis
Carte 2
BestOpportunityBot a fait la plupart du travail sur ce match, mais Assassin a finalement pu le retirer. Play-by-play détaillé ici.
- Assassin: 2 PV, 10 dégâts infligés, 9 dégâts subis
- BestOpportunityBot: 0 HP, 32 Dégâts infligés, 10 Dégâts subis
- L'Avoider v3: 0 HP, 0 Dégâts infligés, 12 Dégâts subis
- Je dois finir de manger: 0 PV, 0 dégâts infligés, 11 dégâts subis
Carte 3
BestOpportunityBot a poussé tout le monde dans des pièges sur ce match. Très cool. Play-by-play détaillé ici.
- BestOpportunityBot: 10 HP, 30 Dégâts infligés, 0 Dégâts subis
- Assassin: 0 PV, 0 Dégâts infligés, 0 Dégâts subis
- Je dois finir de manger: 0 PV, 0 dégâts infligés, 0 dégâts subis
- L'Avoider v3: 0 HP, 0 Dégâts infligés, 0 Dégâts subis
Merci pour vos réponses! Comme il n'y a que 4 Scriptbots, nous abandonnons les plans du tournoi pour trois matchs gratuits pour tous, un sur chacune des cartes ci-dessous. Le scriptbot avec le record de victoires le plus élevé gagne. En cas d'égalité, nous entrerons dans une mort subite où le scriptbot qui rompt la première égalité l'emporte.
Votre tâche, si vous l'acceptez, consiste à coder un Scriptbot qui peut traverser une carte ASCII et détruire ses adversaires. Chaque bataille prendra la forme d'un jeu au tour par tour à ordre de départ aléatoire où chaque Scriptbot aura la chance de dépenser ses points d'énergie (EP) pour effectuer des actions. Le script GameMaster alimentera les entrées et interprétera les sorties de chaque Scriptbot.
Environnement
Chaque Scriptbot est contenu dans son propre répertoire dans lequel il peut lire des map
et stats
fichiers et lecture / écriture au data
fichier. Le data
fichier peut être utilisé pour stocker toute information persistante que vous pourriez trouver utile.
Le fichier stats
Le stats
fichier contient des informations sur vos adversaires et est formaté comme suit. Chaque joueur est représenté sur une ligne distincte. La première colonne est un ID de joueur ( @
signifie vous). La deuxième colonne est la santé de ce joueur.
1,9HP
@,10HP
3,9HP
4,2HP
Le fichier de carte
Le map
fichier pourrait ressembler à ceci ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... ou ca...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... ou ca...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... ou cela pourrait être totalement différent. Quoi qu'il en soit, les caractères utilisés et leur signification resteront les mêmes:
#
Un mur, infranchissable et impénétrable.1
,2
,3
... Un nombre représentant un joueur ennemi. Ces numéros correspondent à l'ID du joueur dans lestats
fichier.!
Un piège. Les scriptbots qui se déplacent vers ces emplacements mourront immédiatement.@
L'emplacement de votre Scriptbot.Espace ouvert dans lequel vous êtes libre de vous déplacer.
Gameplay
Le script GameMaster attribuera un ordre de départ aléatoire aux Scriptbots. Les Scriptbots sont ensuite invoqués dans cet ordre alors qu'ils sont encore en vie. Les scriptbots ont 10 points de vie (HP) et commencent par 10 points d'énergie (EP) à chaque tour, qu'ils peuvent utiliser pour se déplacer ou attaquer. Au début de chaque tour, un Scriptbot soignera pour un HP, ou se verra accorder un EP supplémentaire s'il est déjà à 10 HP (ainsi courir peut parfois être une stratégie viable).
La bataille se termine lorsqu'un seul Scriptbot survit ou lorsque 100 tours se sont écoulés. Si plusieurs Scriptbots sont vivants à la fin d'une bataille, leur place est déterminée en fonction des critères suivants:
- Plus de santé.
- La plupart des dégâts infligés.
- La plupart des dégâts subis.
Entrée Scriptbot
Le GameMaster imprimera la carte de bataille dans un fichier nommé à partir map
duquel le Scriptbot aura accès pour lire. La carte peut prendre n'importe quelle forme, il est donc important que le Scriptbot puisse l'interpréter. Votre Scriptbot sera invoqué avec un paramètre indiquant EP. Par exemple...
:> example_scriptbot.py 3
Le Scriptbot sera invoqué jusqu'à ce qu'il passe la totalité de son EP ou un maximum de 10 11 fois. Les fichiers de carte et de statistiques sont mis à jour avant chaque invocation.
Sortie Scriptbot
Les scriptbots devraient afficher leurs actions sur stout. Une liste d'actions possibles est la suivante:
MOVE <DIRECTION> <DISTANCE>
Coûte 1 EP par
DISTANCE
. LaMOVE
commande déplace votre Scriptbot sur la carte. S'il y a quelque chose comme un mur ou un autre Scriptbot, le GameMaster déplacera votre Scriptbot autant que possible. Si unDISTANCE
EP supérieur au Scriptbot restant est donné, le GameMaster déplace le Scriptbot jusqu'à épuisement de son EP.DIRECTION
peut être toute direction de la boussole deN
,E
,S
, ouW
.PUSH <DIRECTION> <DISTANCE>
Coûte 1 EP par
DISTANCE
. LaPUSH
commande permet à un scriptbot de déplacer un autre scriptbot. Le scriptbot émettant la commande doit être directement à côté du scriptbot poussé. Les deux Scriptbots se déplaceront dans la direction indiquée s'il n'y a pas d'objet bloquant le Scriptbot poussé.DIRECTION
etDISTANCE
sont les mêmes que pour laMOVE
commande.ATTACK <DIRECTION>
Coûte un EP. La
ATTACK
commande inflige 1 dommage à n'importe quel Scriptbot directement à côté du Scriptbot émetteur et dans la direction spécifiée.DIRECTION
est la même que pour laMOVE
commande.PASS
Fin votre tour.
Langues prises en charge
Pour que cela reste raisonnable pour moi, j'accepterai les langues suivantes:
- Java
- Node.js
- Python
- PHP
Vous êtes limité aux bibliothèques qui sont généralement fournies avec vos langues prêtes à l'emploi. Veuillez ne pas me faire localiser des bibliothèques obscures pour faire fonctionner votre code.
Soumission et évaluation
Postez votre code source Scriptbot ci-dessous et donnez-lui un nom sympa! Veuillez également indiquer la version de la langue que vous avez utilisée. Tous les Scriptbots seront examinés pour tomfoolery, veuillez donc bien commenter et ne pas obscurcir votre code.
Vous pouvez soumettre plusieurs entrées, mais veuillez en faire des entrées totalement uniques, et non des versions de la même entrée. Par exemple, vous pouvez vouloir coder un bot Zerg Rush et un bot Gorilla Warfare. C'est très bien. Ne publiez pas Zerg Rush v1, Zerg Rush v2, etc.
Le 7 novembre, je collecterai toutes les réponses et celles qui réussiront l'examen initial seront ajoutées à une tranche de tournoi. Le champion obtient la réponse acceptée. Le support idéal est illustré ci-dessous. Puisqu'il n'y aura probablement pas exactement 16 entrées, certaines parenthèses peuvent finir par n'être que trois ou même deux robots. Je vais essayer de rendre l'équerre aussi équitable que possible. Tout favoritisme nécessaire (dans le cas où une semaine de congé est nécessaire par exemple) sera accordé aux bots qui ont été soumis en premier.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Q&R
Je suis sûr que j'ai raté certains détails, alors n'hésitez pas à poser des questions!
Pouvons-nous croire qu'un fichier de carte est toujours entouré de # symboles? Sinon, que se passe-t-il si un bot tente de quitter la carte? - BrainSteel
Oui, la carte sera toujours délimitée par # et votre Scriptbot démarrera à l'intérieur de ces limites.
S'il n'y a pas de bot présent dans la direction spécifiée dans une commande PUSH, comment fonctionne la commande? - BrainSteel
Le GameMaster ne fera rien, aucun EP ne sera dépensé et le Scriptbot sera rappelé.
Les EP inutilisés s'accumulent-ils? - feersum
Non. Chaque Scriptbot commencera le tour / tour avec 10 EP. Tout EP non dépensé sera perdu.
Je pense que je l'ai, mais juste pour clarifier: avec les bots A et B, est l'ordre des événements A @ 10EP-> MOVE MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP-> ATTACK ..., ou A @ 10EP-> MOVE A @ 9EP-> ATTACK ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? En d'autres termes, toute action dans une boucle de requête contrôleur-bot est-elle atomique? Si oui, pourquoi la boucle? Pourquoi ne pas retourner un seul fichier avec toutes les actions à réaliser? Sinon, les bots devront écrire leurs propres fichiers d'état pour suivre les séquences multi-actions. Le fichier map / stats ne sera valide qu'avant la première action. - COTO
Votre deuxième exemple est proche, mais pas tout à fait raison. Pendant un tour, le Scriptbot est invoqué à plusieurs reprises jusqu'à ce que son EP soit dépensé, ou un maximum de 11 fois. Les fichiers de carte et de statistiques sont mis à jour avant chaque invocation. La boucle est utile dans le cas où un bot donne une sortie invalide. Le GameMaster traitera la sortie invalide et invoquera à nouveau le bot, donnant au bot une chance de corriger son erreur.
publierez-vous le script GameMaster pour le tester? - IchBinKeinBaum
Le script GameMaster ne sera pas publié. Je vous encourage à créer une carte et un fichier de statistiques pour tester le comportement de votre bot.
Si robotA pousse robotB dans un piège, robotA est-il crédité de points de "dégâts infligés" égaux à la santé actuelle de robotB? - Mike Sweeney
Oui, c'est une bonne idée. Un bot recevra des points de dégâts égaux à la santé d'un bot qu'il pousse dans un piège.
la source
map
fichier est toujours entouré de#
symboles? Sinon, que se passe-t-il si un bot tente de quitter la carte?#
et votre Scriptbot commencera à l'intérieur de ces limites.Réponses:
Assassin (Java 1.7)
Essaie de tuer les ennemis autant que possible, sinon déplace un champ. Il est assez bon pour trouver le chemin vers un ennemi, mais ne fait rien pour se cacher des autres robots.
la source
L'Avoider v3
Un bot simple d'esprit. Il a peur des autres robots et pièges. Il n'attaquera pas. Il ignore le fichier de statistiques et ne pense pas du tout à l'avance.
Il s'agit principalement d'un test pour voir comment les règles fonctionneraient, et comme un adversaire stupide pour les autres concurrents.
Edit: passe maintenant quand aucun mouvement n'est meilleur.
Edit2: Les robots peuvent être «1234» au lieu de «123»
Le code Python:
la source
elif ch in '123':
Vous voulez chercher au moins 1234. Si vous êtes le bot 3, la liste des adversaires serait 124.BestOpportunityBot
Cela a fini par être un peu plus long que prévu ... et je ne suis pas sûr de bien comprendre les règles pour les virages, alors nous verrons comment cela se passe.
la source
Je dois finir de manger
Python:
la source
import sys
?