Scriptbot Warz!
Die Ergebnisse sind da und Assassin ist unser Champion und gewinnt 2 von 3 Matches! Vielen Dank an alle, die ihre Scriptbots eingereicht haben! Besonderer Dank geht an horns für den BestOpportunityBot, der ein exzellentes Laufverhalten zeigte und alle Aktionsmöglichkeiten voll ausschöpfte .
Karte 1
Assassin hat BestOpportunityBot frühzeitig besiegt und der Rest des Spiels war ziemlich langweilig. Ausführliches Play-by-Play hier.
- Attentäter: 10 HP, 10 verursachter Schaden, 3 erlittener Schaden
- The Avoider v3: 10 HP, 0 verursachter Schaden, 0 erlittener Schaden
- Erhielt zu Ende zu essen: 10 HP, 0 zugefügter Schaden, 0 erlittener Schaden
- BestOpportunityBot: 0 HP, 3 verursachter Schaden, 10 erlittener Schaden
Karte 2
BestOpportunityBot hat die meiste Arbeit an diesem Match geleistet, aber Assassin konnte ihn am Ende ausschalten. Ausführliches Play-by-Play hier.
- Attentäter: 2 LP, 10 verursachter Schaden, 9 erlittener Schaden
- BestOpportunityBot: 0 HP, 32 verursachter Schaden, 10 erlittener Schaden
- The Avoider v3: 0 LP, 0 zugefügter Schaden, 12 erlittener Schaden
- Erhielt zu Ende zu essen: 0 LP, 0 zugefügter Schaden, 11 erlittener Schaden
Karte 3
BestOpportunityBot hat in diesem Match alle in die Falle getrieben. Sehr cool. Ausführliches Play-by-Play hier.
- BestOpportunityBot: 10 HP, 30 verursachter Schaden, 0 erlittener Schaden
- Attentäter: 0 LP, 0 zugefügter Schaden, 0 erlittener Schaden
- Erhielt zu Ende zu essen: 0 LP, 0 zugefügter Schaden, 0 erlittener Schaden
- The Avoider v3: 0 LP, 0 zugefügter Schaden, 0 erlittener Schaden
Danke für deine Antworten! Da es nur 4 Scriptbots gibt, geben wir die Turnierpläne für drei Free-for-All-Matches auf, eines auf jeder der folgenden Karten. Der Scriptbot mit dem höchsten Gewinnrekord gewinnt. Im Falle eines Unentschieden werden wir in einen plötzlichen Tod verwickelt, bei dem der Scriptbot gewinnt, der das Unentschieden zuerst bricht.
Ihre Aufgabe ist es, einen Scriptbot zu codieren, der eine ASCII-Map durchquert und deren Gegner zerstört, falls Sie dies akzeptieren möchten. Jede Schlacht wird in Form eines rundenbasierten Spiels in zufälliger Startreihenfolge ausgetragen, in dem jeder Scriptbot die Möglichkeit hat, seine Energiepunkte (EP) für Aktionen auszugeben. Das GameMaster-Skript speist Eingaben in jeden Scriptbot ein und interpretiert sie.
Umgebung
Jede Scriptbot wird in einem eigenen Verzeichnis enthält , in dem sie von den lesen map
und stats
Dateien und Lese- / Schreibzugriff auf die data
Datei. In der data
Datei können alle Informationen gespeichert werden, die Sie für nützlich halten.
Die Statistikdatei
Die stats
Datei enthält Informationen zu Ihren Gegnern und ist wie folgt formatiert. Jeder Spieler ist in einer eigenen Reihe vertreten. Die erste Spalte ist eine Spieler-ID ( @
bedeutet Sie). Die zweite Spalte ist die Gesundheit dieses Spielers.
1,9HP
@,10HP
3,9HP
4,2HP
Die Map-Datei
Die map
Datei könnte ungefähr so aussehen ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... oder dieses...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... oder dieses...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... oder es könnte ganz anders aussehen. In jedem Fall bleiben die verwendeten Zeichen und ihre Bedeutung gleich:
#
Eine Mauer, unpassierbar und undurchdringlich.1
,2
,3
... Eine Reihe einen feindlichen Spieler darstellt. Diese Nummern entsprechen der Player-ID in derstats
Datei.!
Eine Falle. Scriptbots, die an diese Orte ziehen, sterben sofort.@
Der Standort Ihres Scriptbots.Freiraum, in dem Sie sich frei bewegen können.
Spielweise
Das GameMaster-Skript weist den Scriptbots eine zufällige Startreihenfolge zu. Die Scriptbots werden dann in dieser Reihenfolge aufgerufen, solange sie noch aktiv sind. Scriptbots haben 10 Lebenspunkte (HP) und beginnen mit 10 Energiepunkten (EP) pro Runde, mit denen sie sich bewegen oder angreifen können. Zu Beginn jeder Runde heilt ein Scriptbot für eine HP oder erhält eine zusätzliche EP, wenn er bereits bei 10 HP ist (daher kann das Ausführen manchmal eine sinnvolle Strategie sein).
Der Kampf endet, wenn nur ein Scriptbot überlebt hat oder 100 Runden vergangen sind. Wenn am Ende eines Kampfes mehrere Scriptbots am Leben sind, wird ihr Platz anhand der folgenden Kriterien bestimmt:
- Die meiste Gesundheit.
- Der meiste verursachte Schaden.
- Den meisten Schaden genommen.
Scriptbot-Eingabe
Der GameMaster druckt die Kampfkarte in eine Datei mit dem Namen, aus map
der der Scriptbot lesen kann. Die Karte kann jede Form annehmen, daher ist es wichtig, dass der Scriptbot sie interpretieren kann. Ihr Scriptbot wird mit einem Parameter aufgerufen, der EP anzeigt. Beispielsweise...
:> example_scriptbot.py 3
Der Scriptbot wird solange aufgerufen, bis er seine gesamte EP oder maximal 10 bis 11 Mal ausgegeben hat. Die Karten- und Statistikdateien werden vor jedem Aufruf aktualisiert.
Scriptbot-Ausgabe
Scriptbots sollten ihre Aktionen auf stout ausgeben. Eine Liste der möglichen Aktionen lautet wie folgt:
MOVE <DIRECTION> <DISTANCE>
Kostet 1 EP pro
DISTANCE
. DerMOVE
Befehl bewegt Ihren Scriptbot auf der Karte. Wenn etwas wie eine Wand oder ein anderer Scriptbot im Weg ist, verschiebt der GameMaster Ihren Scriptbot so weit wie möglich. Wenn eineDISTANCE
EP vergeben wird, die größer ist als die verbleibende EP des Scriptbots, verschiebt der GameMaster den Scriptbot, bis die EP abgelaufen ist.DIRECTION
kann jede Himmelsrichtung vonN
,E
,S
oderW
.PUSH <DIRECTION> <DISTANCE>
Kostet 1 EP pro
DISTANCE
. Mit diesemPUSH
Befehl kann ein Scriptbot einen anderen Scriptbot verschieben. Der Scriptbot, der den Befehl ausgibt, muss direkt neben dem Scriptbot stehen, der übertragen wird. Beide Scriptbots bewegen sich in die angegebene Richtung, wenn kein Objekt den Scriptbot blockiert.DIRECTION
undDISTANCE
sind die gleichen wie für denMOVE
Befehl.ATTACK <DIRECTION>
Kostet eine EP. Der
ATTACK
Befehl fügt jedem Scriptbot direkt neben dem ausstellenden Scriptbot und in der angegebenen Richtung 1 Schaden zu.DIRECTION
ist das gleiche wie für denMOVE
Befehl.PASS
Beendet deinen Zug.
Unterstützte Sprachen
Um dies für mich zumutbar zu machen, akzeptiere ich folgende Sprachen:
- Java
- Node.js
- Python
- PHP
Sie sind auf Bibliotheken beschränkt, die standardmäßig in Ihren Sprachen enthalten sind. Bitte lassen Sie mich keine undurchsichtigen Bibliotheken finden, damit Ihr Code funktioniert.
Einreichung und Beurteilung
Veröffentlichen Sie Ihren Scriptbot-Quellcode unten und geben Sie ihm einen coolen Namen! Bitte geben Sie auch die Version der von Ihnen verwendeten Sprache an. Alle Scriptbots werden auf Tomfoolery überprüft. Bitte kommentieren Sie sie gut und verschleiern Sie Ihren Code nicht.
Sie können mehr als einen Eintrag einreichen, aber machen Sie bitte völlig eindeutige Einträge und keine Versionen desselben Eintrags. Beispielsweise möchten Sie möglicherweise einen Zerg Rush-Bot und einen Gorilla Warfare-Bot codieren. Das ist gut. Posten Sie keine Zerg Rush v1, Zerg Rush v2 usw.
Am 7. November werde ich alle Antworten sammeln und diejenigen, die die erste Bewertung bestehen, werden in eine Turnier-Klammer aufgenommen. Der Champion erhält die akzeptierte Antwort. Die ideale Halterung ist unten dargestellt. Da es wahrscheinlich nicht genau 16 Einträge geben wird, sind einige Klammern möglicherweise nur drei oder sogar zwei Bots. Ich werde versuchen, die Klammer so fair wie möglich zu gestalten. Jede notwendige Bevorzugung (zum Beispiel für den Fall, dass eine Tschüss-Woche benötigt wird) wird an die Bots vergeben, die zuerst eingereicht wurden.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Q & A
Ich bin mir sicher, dass ich einige Details verpasst habe, also zögern Sie nicht, Fragen zu stellen!
Dürfen wir darauf vertrauen, dass eine Kartendatei immer von # Symbolen umgeben ist? Wenn nicht, was passiert, wenn ein Bot versucht, die Karte zu verlassen? - BrainSteel
Ja, die Map wird immer von # begrenzt und Ihr Scriptbot startet innerhalb dieser Grenzen.
Wenn in der in einem PUSH-Befehl angegebenen Richtung kein Bot vorhanden ist, wie funktioniert der Befehl? - BrainSteel
Der GameMaster macht nichts, es wird keine EP ausgegeben und der Scriptbot wird erneut aufgerufen.
Sammeln sich ungenutzte EPs an? - Feersum
Nein. Jeder Scriptbot startet die Runde / Runde mit 10 EP. Nicht ausgegebene EP werden verschwendet.
Ich denke, ich habe es verstanden, aber um es zu verdeutlichen: Bei Bots A und B ist die Reihenfolge der Ereignisse A @ 10EP -> MOVE MAP_UPDATE B @ 10EP -> PUSH MAP_UPDATE A @ 9EP -> ATTACK MAP_UPDATE B @ 9EP -> ATTACK ... oder A @ 10EP-> MOVE A @ 9EP-> ATTACK ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? Mit anderen Worten, ist alle Aktion in einer Controller-Bot-Abfrageschleife atomar? Wenn ja, warum die Schleife? Warum nicht eine einzelne Datei mit allen auszuführenden Aktionen zurückgeben? Andernfalls müssen Bots ihre eigenen Statusdateien schreiben, um Multi-Action-Sequenzen zu verfolgen. Die Map / Statistik-Datei ist nur vor der ersten Aktion gültig. - COTO
Ihr zweites Beispiel ist nah, aber nicht ganz richtig. Während eines Spielzugs wird der Scriptbot wiederholt aufgerufen, bis die EP ausgegeben wurde, oder maximal elf Mal. Die Karten- und Statistikdateien werden vor jedem Aufruf aktualisiert. Die Schleife ist nützlich, wenn ein Bot eine ungültige Ausgabe ausgibt. Der GameMaster wird sich mit der ungültigen Ausgabe befassen und den Bot erneut einbinden, so dass der Bot die Möglichkeit hat, den Fehler zu korrigieren.
Werden Sie das GameMaster-Skript zum Testen freigeben? - IchBinKeinBaum
Das GameMaster-Skript wird nicht veröffentlicht. Ich würde Sie ermutigen, eine Karte und eine Statistikdatei zu erstellen, um das Verhalten Ihres Bots zu testen.
Wenn Roboter A Roboter B in eine Falle stößt, werden Roboter A "Schaden" -Punkte gutgeschrieben, die dem aktuellen Gesundheitszustand von Roboter B entsprechen? - Mike Sweeney
Ja, das ist eine gute Idee. Einem Bot werden Schadenspunkte gewährt, die der Gesundheit jedes Bots entsprechen, den er in eine Falle stößt.
quelle
map
Datei immer von#
Symbolen umgeben ist? Wenn nicht, was passiert, wenn ein Bot versucht, die Karte zu verlassen?#
und Ihr Scriptbot startet innerhalb dieser Grenzen.Antworten:
Assassin (Java 1.7)
Versucht, Feinde zu töten, wann immer dies möglich ist, ansonsten wird ein Feld verschoben. Es ist ziemlich gut, den Weg zu einem Feind zu finden, tut aber nichts, um sich vor anderen Bots zu verstecken.
quelle
Der Avoider v3
Ein einfacher Bot. Es hat Angst vor anderen Robotern und Fallen. Es wird nicht angreifen. Es ignoriert die Statistikdatei und denkt überhaupt nicht weiter.
Dies ist hauptsächlich ein Test, um zu sehen, wie die Regeln funktionieren würden, und ein blöder Gegner für andere Konkurrenten.
Edit: Jetzt wird PASS, wenn kein MOVE besser ist.
Edit2: Roboter können '1234' anstelle von '123' sein
Der Python-Code:
quelle
elif ch in '123':
Sie möchten mindestens 1234 suchen. Wenn Sie Bot 3 sind, wäre dieBestOpportunityBot
Dies dauerte etwas länger als geplant ... und ich bin mir nicht sicher, ob ich die Regeln für Abbiegungen vollständig verstehe. Wir werden also sehen, wie das funktioniert.
quelle
Muss fertig essen
Python:
quelle
import sys
?