Hinweis: Diese König-von-der-Hügel- Herausforderung ist abgeschlossen. Dies bedeutet, dass das grüne Häkchen, das C5H8NNaO4 für seine Eingabe zugewiesen wurde. Der Beobachter wird nicht zu einer neuen Antwort verschoben.
Sie können zwar immer noch neue Einträge einreichen, es kann jedoch zu Verzögerungen bei neuen Turnieren kommen, da ich nicht mehr aktiv nach neuen Einträgen suche.
Einführung
In dieser Herausforderung spielst du ein Arcade-Spiel mit dem Titel Der ultimative Samurai-Showdown Ultimate Edition-Spezialversion 2.0 X Alpha Omega Turbo (oder kurz Ultimate Samurai Showdown ). Deine Gegner? Kein anderer als die anderen Mitglieder von Programming Puzzles & Code Golf!
Wie Sie vielleicht von einem PPCG-Arcade-Spiel erwarten, spielen Sie Ultimate Samurai Showdown nicht direkt, sondern schreiben ein Programm, das das Spiel für Sie spielt. Dieses Programm kämpft gegen Programme, die von anderen Benutzern in einem Duell eingereicht wurden. Das geschickteste Programm wird zum ultimativen Samurai von PPCG gekrönt und erhält das grüne Häkchen der Legende.
Spielbeschreibung
Dieser Abschnitt beschreibt die Mechanismen hinter dem Spiel.
Siegbedingung
Ein Match besteht aus zwei Samurai, die gegeneinander antreten. Jeder Samurai beginnt jedes Match mit 20 Trefferpunkten und 1 Ehre . Ein Samurai gewinnt, wenn sein Gegner tot ist und er noch lebt. Es gibt zwei Methoden, mit denen ein Samurai sterben kann:
- Wenn die Trefferpunkte eines Samurai auf 0 gesenkt werden, stirbt er.
- Wenn ein Samurai seine eigene Ehre unter 0 bringt , wird er von den Göttern niedergeschlagen, weil er sich in einem Duell unehrenhaft verhält.
Von den Göttern niedergeschlagen zu werden hat eine höhere Priorität als Trefferpunkte auf 0 zu senken. In einer Situation, in der ein Samurai 0 Gesundheitspunkte und der andere -1 Ehrepunkte hat, gewinnt der Samurai mit 0 Gesundheitspunkten. In einer Situation, in der beide Samurai bei -1 Ehre sind, werden beide von den Göttern niedergeschlagen und das Spiel ist unentschieden.
Ein Match besteht aus bis zu 500 Runden . Wenn alle 500 Runden vergangen sind und das Match noch nicht entschieden wurde (kein Samurai ist gestorben), langweilen sich die Götter und schlagen beide Samurai nieder, was zu einem Unentschieden führt.
Aktionen
In jedem Zug muss der Samurai genau eine der folgenden Aktionen ausführen:
W
Die Samurai sollen warten und nichts unternehmen. Das lässt ihn cool aussehen, hilft ihm aber nicht, seinen Gegner zu besiegen. Dies ist auch die Standardaktion.
B
Der Samurai soll sich auf ehrenvolle Weise vor seinem Gegner verneigen. Dies gefällt den Göttern und somit erhalten die Samurai 1 Ehre. Ehre ist für den Erfolg Ihrer Samurai von entscheidender Bedeutung, da Ehre im Wesentlichen die "Ressource" für dieses Spiel ist - alles bewegt sich von der Ehre ab B
und W
kann sie verringern. Wenn ein Samurai 7 oder mehr Ehre erlangt, erhält er das Schwert der Götter . Die Auswirkungen davon werden unten beschrieben.
Das Verbeugen vor deinem Gegner lässt dich jedoch offen, wenn dein Gegner dich mit seinem Schwert schlagen will. Sei also vorsichtig, wenn du dich entscheidest, dich zu verbeugen.
G
Die Samurai müssen eine Verteidigungsposition einnehmen und sich vor Schwertschlägen schützen. Dieser Zug blockiert erfolgreich alle Schwertschläge, auch solche, die mit dem Schwert der Götter ausgeführt wurden .
Die Götter sehen jedoch einen übermäßig defensiven Samurai nicht gern, so dass dieser Zug 1 Ehre kostet, wenn die Aktion des Samurai in der unmittelbar vorhergehenden Runde ebenfalls Wächter war. Es verbraucht sonst keine Ehre.
I
Der Samurai soll versuchen, seinen Gegner mit einem schnellen Zug seines Schwertes aus der Scheide zu schlagen. Wenn der Samurai 7 Ehre oder mehr hat, wird er das Schwert der Götter anstelle seines regulären Schwertes verwenden. Dieser Zug verbraucht 1 Ehre.
Das schnelle Ziehen ist ein schneller Schlag, der langsamere Overhead-Angriffe schlägt, jedoch gegen Paraden verliert. Wenn der Treffer erfolgreich ist, fügt er 1 Schaden oder 2 Schaden mit dem Schwert der Götter zu .
P
Der Samurai soll versuchen, einen ankommenden Angriff abzuwehren, und dann seinen eigenen Angriff starten. Wenn der Samurai 7 Ehre oder mehr hat, wird er das Schwert der Götter anstelle seines regulären Schwertes verwenden. Dieser Zug verbraucht 1 Ehre.
Die Parade ist ein gutes Manöver gegen schnelle Schläge, wird aber durch langsamere Overhead-Angriffe überwältigt. Wenn der Treffer erfolgreich ist, fügt er 1 Schaden oder 2 Schaden mit dem Schwert der Götter zu .
O
Der Samurai soll versuchen, seinen Gegner mit einem langsameren Überkopfangriff zu schlagen. Wenn der Samurai 7 Ehre oder mehr hat, wird er das Schwert der Götter anstelle seines regulären Schwertes verwenden. Dieser Zug verbraucht 1 Ehre.
Der Overhead-Schlag kann Paraden überwältigen, verliert aber gegen schnelle Schläge. Wenn der Treffer erfolgreich ist, fügt er 1 Schaden oder 2 Schaden mit dem Schwert der Götter zu .
Schwert der Götter
Ein Samurai mit einer Ehre von 7 oder mehr erhält die Fähigkeit, das Schwert der Götter zu benutzen . Wenn seine Ehre unter 7 verringert wird, wird ihm die Fähigkeit, das Schwert der Götter zu benutzen , entzogen. Das Schwert der Götter fügt 2 Schadenspunkte statt 1 Schadenspunkt zu.
Das Schwert der Götter lässt nicht zu, dass ein Schlag einen Schwertschlag besiegt, den er normalerweise nicht besiegen würde. Zum Beispiel verliert eine Parade des Schwertes der Götter immer noch gegen einen gewöhnlichen Overhead-Schlag, und ein schnelles Ziehen des Schwertes der Götter wird ein gewöhnliches schnelles Ziehen nicht überwältigen. Tatsächlich ist das sogenannte Schwert der Götter gar nicht so mächtig - vielleicht ist es ein kosmischer Witz, den die Götter spielen ...
Interaktionstabelle
Das folgende Stapel-Snippet enthält eine Tabelle, in der alle möglichen Ergebnisse der verschiedenen Aktionskombinationen, die die beiden Samurai ausführen können, explizit aufgeführt sind. Klicken Sie zum Anzeigen auf "Code-Snippet anzeigen" und dann auf "Code-Snippet ausführen".
Programmkommunikation
Um die Durchführung des Turniers zu erleichtern, wurde ein Controller-Programm geschrieben, das die Rolle der "Götter" übernimmt - es führt Aufzeichnungen über Ehre und Gesundheit und schlägt Samurai entsprechend. In diesem Abschnitt wird beschrieben, wie Ihr Programm mit dem Steuerungsprogramm kommuniziert.
Eingabebeschreibung
Das Steuerungsprogramm ruft Ihr Programm folgendermaßen von der Befehlszeile aus auf:
<command> <history> <enemy_history> <your_health> <enemy_health> <your_honour> <enemy_honour>
woher:
<command>
ist der Befehl, der zum Ausführen Ihres Programms erforderlich ist. Befindet sich Ihr Programm beispielsweise in einer Dateisuper_sentai.pl
, lautet der Befehl wahrscheinlichperl super_sentai.pl
.<history>
ist eine Geschichte von Zügen, die Sie gemacht haben. Zum BeispielWWBP
würde bedeuten, dass Sie zweimal gewartet, einmal gebeugt und einmal pariert haben.<enemy_history>
ist eine Geschichte von Bewegungen, die dein Feind gemacht hat. Zum BeispielBBBI
würde bedeuten, dass Ihr Feind sich dreimal verbeugte und einen schnellen Zug ausführte.<your_health>
ist Ihre aktuelle Gesundheit.<enemy_health>
ist die aktuelle Gesundheit des Feindes.<your_honour>
ist deine aktuelle Ehre.<enemy_honour>
ist die aktuelle Ehre des Feindes.
In der ersten Runde ist das history
und enemy_history
leer, sodass Ihr Programm nur mit den letzten vier Argumenten wie folgt aufgerufen wird:
<command> <your_health> <enemy_health> <your_honour> <enemy_honour>
Bitte seien Sie darauf vorbereitet!
Kluge Leser mögen bemerken, dass die vier Argumente, die die Ehre und Gesundheit beider Samurai beweisen, in gewissem Maße überflüssig sind; da dies ein perfektes informationsspiel ist, kann die ehre und gesundheit der samurai nur anhand der geschichten bestimmt werden.
Diese Werte werden aus praktischen Gründen bereitgestellt, damit Sie die Verlaufsargumente nicht analysieren müssen. Dies sollte sich als nützlich erweisen, um einfache Strategien zu implementieren, z. B. nicht anzugreifen, wenn Ihre Ehre 0 ist.
Ausgabebeschreibung
Wählen sollte eine Aktion, Ihr Programm Ausgang eines W
, B
, G
, I
, P
, oder O
auf die Standardausgabe, je nachdem , welche Aktion Sie machen wollen. Wenn Ihr Programm innerhalb von 1000 ms nichts ausgibt, wird es beendet und Ihr Programm wird so behandelt, als ob es ausgegeben würde W
.
Wenn Ihr Programm mehr als einen Buchstaben ausgibt, wird nur der erste Buchstabe berücksichtigt - die Ausgabe entspricht Parry
also der Ausgabe P
.
Wenn die Ausgabe des ersten Buchstabens Ihres Programms keine der oben aufgeführten Optionen enthält, wird standardmäßig verwendet W
.
Einreichungsformat
Senden Sie ein Programm als Antwort auf diesen Beitrag. Sie können mehrere Programme einreichen. Wenn Sie mehrere einfache Programme einreichen, empfehle ich, diese als einzelne Antwort einzureichen. Wenn Sie mehrere komplexe Programme einreichen, empfehle ich, sie als separate Antworten einzureichen. Sobald ich dein / e Programm (e) erfolgreich zum Turnier hinzugefügt habe, werde ich mit deinem Eintrag ein Commit für das Git-Repository durchführen (siehe unten).
Wenn ich auf Probleme stoße, die verhindern, dass Ihr Programm zum Turnier hinzugefügt wird, hinterlasse ich einen Kommentar zu Ihrem Eintrag, der auf das Problem hinweist.
Bitte fügen Sie Ihrer Einreichung Folgendes bei:
- Der vom Menschen lesbare Name Ihres Programms zur Verwendung in Anzeigetafeln. Leerzeichen sind hier erlaubt; Kommas und Unicode-Zeichen sind nicht.
- Die Sprache, in der Ihr Programm geschrieben ist. Bitte vermeiden Sie es, in fremden, schwer zugänglichen Sprachen wie TinyMUSH zu schreiben.
- Eine kurze Zusammenfassung Ihres Programms. Dies kann eine Beschreibung der Funktionsweise des Programms sein oder nur ein Text über Ihr Programm (wenn Sie alles geheim halten möchten) oder beides.
- Die zum Ausführen Ihres Programms erforderlichen Befehle. Wenn Sie beispielsweise Ihre Übermittlung in Java geschrieben haben
example.java
, geben Sie Kompilierungsanweisungen ein und führenjavac example.java
dann Anweisungen ausjava example
. - Der Quellcode für das Programm.
Als Hilfestellung beim Einreichen stelle ich eine Einreichungsvorlage zur Verfügung, die Sie hier finden . Die Vorlage macht die Einreichungen schöner. Ich empfehle es nachdrücklich.
Ich stelle auch zwei Beispiele zur Verfügung. Obwohl die Beispielbeiträge am Round Robin teilnehmen, besteht ihr Hauptzweck darin, die Eingabe- und Eingabe- / Ausgabeformate für das Turnier zu klären, anstatt ernsthafte Konkurrenten für den Titel Ultimate Samurai zu sein.
Turnierstruktur
In diesem Abschnitt wird beschrieben, wie das Turnier zwischen den Teilnehmern durchgeführt wird.
Steuerungsprogramm
Das Steuerungsprogramm ist in Python 2 geschrieben und befindet sich im Ultimate Samurai Showdown Github-Repository . Wenn Sie es selbst ausführen möchten, finden Sie Anweisungen zum Ausführen in der Datei README.md im Link. Es sind jedoch nur Turniere, die auf meinem Computer ausgeführt werden, offiziell, um Hardware-Unterschiede zu vermeiden, die sich auf die Turnierergebnisse auswirken.
Das Steuerprogramm wird auf einem Laptop unter Arch Linux ausgeführt. Es hat einen Intel Core i7 Prozessor und 8 GB RAM. Ich werde mich bemühen, alle Einträge auf meinem Computer zum Laufen zu bringen, aber ich würde es sehr begrüßen, wenn Sie Sprachen meiden, auf die nicht frei zugegriffen werden kann (da keine Kosten anfallen).
Punktesystem
Das Punktesystem ist ein Round Robin. Jedes Programm spielt acht Spiele gegen jedes andere Programm. Ein Gewinn gewährt dem Programm 1 Punkt, ein Verlust keine Punkte und ein Unentschieden 0,5 Punkte. Das Programm mit der höchsten Punktzahl gewinnt das Spiel. Wenn es ein Unentschieden gibt, werde ich die beiden besten Programme gegeneinander antreten, um den Gewinner zu ermitteln.
Die Häufigkeit, mit der jedes Programm das andere Programm abspielt, kann von 8 verringert werden, wenn eine extrem große Anzahl von Teilnehmern anwesend ist. In diesem Fall werde ich hier einen Hinweis einfügen.
Ich werde das Round-Robin-Verfahren viele Male durchführen, wenn neue Beiträge veröffentlicht werden, aber es zählt nur das aktuellste Round-Robin-Verfahren.
Disqualifikationen
Es ist möglich, dass Ihr Programm vom Turnier ausgeschlossen wird. Eine Disqualifikation kann erfolgen, wenn:
- Ihr Programm wird nicht kompiliert oder ausgeführt.
- Ihr Programm ist ein strategisches Duplikat eines anderen Programms (dh es implementiert genau dieselbe Strategie wie ein anderes Programm).
- Ihr Programm versucht, andere Programme zu sabotieren, indem Sie den Controller-Code, den Code anderer Programme usw. ändern.
- Ihr Programm versucht, einen Fehler im Controller-Code auszunutzen. Anstatt Fehler auszunutzen, sollten Sie stattdessen ein Problem im Git-Repository eröffnen, hier einen Kommentar abgeben oder mich im Chat anpingen.
Vergangene Ergebnisse
Detaillierte Ergebnisse aller Turniere finden Sie auf der Wiki-Seite .
Das letzte Turnier wurde am 2015-07-17 07:20 abgeschlossen. Hier ist eine Zusammenfassung der Ergebnisse:
The Observer: 209.0
Coward: 203.0
Monk: 173.0
Elephant Warrior: 157.0
Iniqy: 157.0
Agent 38: 144.0
Ninja: 138.0
Meiyo Senshi: 138.0
Kakashi: 136.0
Yoshimitsu: 131.0
Hermurai: 121.0
Warrior Princess: 120.0
Gargoyle: 119.5
The Honourable: 119.0
Hebi: 118.5
Predictor: 116.0
Whack-a-mole: 107.0
The Fool: 106.0
The Prophet: 105.0
Copy-san: 97.0
YAGMCSE: 80.0
The Waiter: 66.0
Swordsman: 43.0
Spork Holder: 32.5
Blessed Samurai: 27.5
Attacker: 27.0
The Terminator: 17.0
Master Yi: 16.0