Ihr freundlicher Nachbar, Doktor Tree, hat Ihnen gerade drei magische Kreaturen namens Codémon geschenkt. In der nahe gelegenen Stadt Colorville gibt es ein Kampfturnier. Bist du der Beste, wie es noch niemand war?
Überblick
Dies ist ein Kampfturnier. Jeder Spieler kontrolliert ein Team von drei Monstern und das Ziel ist es, das andere Team auszuschalten (zu töten). Es gibt 100 Runden mit Punkten für Siege und Unentschieden. Das Team mit den meisten Punkten gewinnt!
Monster
Ein Codémon ist ein kompliziertes kleines Wesen. Es stehen fünf Typen (Elemente) zur Auswahl, drei Statistiken und drei Bewegungsslots.
Typen
Jedem Codémon ist ein Typ zugeordnet. Die fünf Typen sind Normal, Hellsichtig, Feuer, Wasser und Gras. Jeder hat seine Stärken und Schwächen. Der Schaden basiert auf der folgenden Tabelle:
Die Zahlen sind Schadensmultiplikatoren. Beispielsweise hat feuerangreifendes Wasser einen Modifikator von 0,5 (halber Schaden), während feuerangreifendes Gras verdoppelt wird (2).
Statistiken
Jedes Monster hat drei Statistiken, die seine Kampffähigkeiten bestimmen. Angriff erhöht den Schaden, den er verursacht. Verteidigung verringert den Schaden. Die Geschwindigkeit erlaubt es, sich vor denjenigen mit niedrigerer Geschwindigkeit zu bewegen.
Jedes Monster hat einen Startwert von 50 für jeden Wert und ein Maximum von 100. Wenn du deine Monster erstellst, kannst du 80 zusätzliche Punkte ( für jeden Wert) zuweisen . Denken Sie daran, dass kein einzelner Wert über 100 hinausgehen kann. Sie könnten also eine Verteilung von 100/80/50, 90/80/60 oder 65/65/100 haben, aber 120/50/60 ist illegal. Jedes Team mit illegalen Statistiken wird disqualifiziert. Sie sind nicht erforderlich verwenden , um alle 80 Punkte, aber Sie sollten wahrscheinlich nicht mit dem Minimum 50/50/50 gehen.
Sie könnten HP auch als Statistik betrachten, aber jedes Codémon verfügt über nicht veränderbare 100 HP. Wenn HP auf Null fällt, können sie nicht mehr weiterkämpfen. HP werden vor jedem Kampf auf 100 aufgefüllt.
Bewegt
Jedes Monster kennt drei Kampfzüge. Die drei gewählten müssen verschieden sein, also kein Schlag / Schlag / Schlag.
Es gibt 15 Züge, drei von jedem Typ. Jeder Typ hat einen direkten Angriff, einen schwächeren Angriff mit einem Effekt und einen einzigen Effektzug.
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
bezieht sich auf die Art des Umzugs. power
ist seine Schlagkraft. uses
Gibt an, wie oft es pro Kampf verwendet werden kann ( -
unbegrenzt). usable
zeigt an, von welchen Typen es verwendet werden kann (zum Beispiel kann einem psychischen Typ kein Schlag gegeben werden, da es keinen gibt P
). effect
zeigt, welche Auswirkungen die Bewegungen haben. Es besteht eine 75% ige Chance, dass jeder Effekt wirkt, mit Ausnahme von Heilen, das immer wirkt.
Bei Effekten, die die Werte eines Monsters ändern, können die Effekte gestapelt werden . Zum Beispiel kann die zweimalige Verwendung von Schwächen den Angriff deines Gegners auf 0,64 verringern. Effekte, die die Werte eines Monsters nicht ändern (Schlaf, Brennen usw.) , werden nicht gestapelt .
Schlaf versetzt den Gegner in den Schlaf, mit einer Wahrscheinlichkeit von 60%, zu Beginn jeder Runde aufzuwachen. Schlafende Monster werden keine Maßnahmen ergreifen.
Verbrennung fügt dem Gegner am Ende jedes Spielzugs 10 HP zu, wenn er aktiv ist . Gift wirkt ähnlich, nimmt aber mit jeder Runde mehr zu. In der ersten Runde sind es 5 und danach erhält es 5 pro Runde. Ab dem vierten Spielzug sind es also 20 Schadenspunkte. Dies sind Pauschalschäden, die weder vom Monstertyp noch von Boni abhängig sind.
Verwirrung kann dazu führen, dass ein Monster selbst angreift, anstatt das zu tun, was ihm befohlen wurde. Dieser Angriff hat Stärke 10 und eine Chance von 30%, dass er in einem bestimmten Zug ausgeführt wird.
Um klar zu sein, die Effekte dauern bis zum Ende des Kampfes (außer Schlaf, wie oben erwähnt).
Moves erhalten außerdem eine um 20% erhöhte Kraft, wenn sie von einem Monster des entsprechenden Typs verwendet werden. Zum Beispiel wird ein Grasmonster, das Vine verwendet, verstärkt, während es Punch nicht verwendet.
Geheime Statistiken
Die Werte und der Typ (aber nicht die Züge) jedes Monsters sind öffentlich bekannt. Ihre Gegner können sehen, gegen was sie kämpfen, um die beste Aktion zu wählen. Es gibt jedoch auch versteckte Boni.
Insbesondere erhalten Sie nach jeweils zwei Kämpfen einen "Bonus" -Statpunkt für jedes Monster in Ihrem Team. Punkte werden an alle Monster vergeben, die tot oder lebendig sind, Gewinner oder Verlierer. Sie können dies jeder der drei Statistiken zuweisen, die Sie auswählen. Du kannst sie nicht auf ein einzelnes Monster stapeln. jedes Monster bekommt man jedes Mal. Diese Punkte sind immun gegen die 100-Grenze. Da es 100 Kampfrunden geben wird, bedeutet dies, dass Sie einen einzigen Wert von bis zu 149 erhalten können, wenn Sie alle Ihre Boni darauf verteilen. Auch hier sieht der Gegner nur Ihre "Basis" -Statistiken. Je weiter Sie sich im Turnier befinden, desto weiter entfernt sich sein Wissen von der Wahrheit.
Schlacht
Der Kampf findet zwischen Dreierteams statt, von denen jeweils eines aktiv ist. Zu Beginn wird dir die gegnerische Mannschaft gezeigt und du wirst gefragt, welches Monster dein erster "aktiver" Spieler sein soll.
Danach erfolgt der Wechsel mit folgenden Schritten:
- Switch: Obligatorische Monsterschalter finden statt (falls vorhanden)
- Wähle Kampfhandlung
- Schalter: Alle optionalen Monsterschalter (ausgewählt als Kampfaktion) werden ausgeführt
- Schlaf-Check: Chance, aus dem Schlaf aufzuwachen
- Angriff 1: Wenn möglich, verwendet das schnellere Monster seinen ausgewählten Zug
- Angriff 2: Falls möglich, verwendet das andere Monster seinen ausgewählten Zug
- Effektschaden: Füge lebenden Monstern Verbrennungs- / Giftschaden zu
"Schneller" bedeutet das Monster mit der höheren Geschwindigkeit. Wenn beide Geschwindigkeitsstatistiken gleich sind, wird dies durch PRNG-Münzwurf bei jeder Umdrehung ausgewählt.
Am Ende jedes Spielzugs, in dem dein aktives Monster stirbt, wirst du aufgefordert, ein neues aktives Monster zu wählen. Du kannst auch aktive Monster während deines Zuges wechseln (vorausgesetzt, du hast mehr als ein Lebendiges). Wenn Sie in diesem Zug wechseln, werden Sie in diesem Zug keinen Kampfzug ausführen.
Monster werden nicht "verarbeitet", wenn sie inaktiv sind. Dies bedeutet, dass sie keinen Brand- / Giftschaden erleiden, dass sich keine Giftmarken ansammeln, dass sie nicht aus dem Schlaf erwachen usw. Beim Umschalten werden keine Effekte entfernt oder geändert . Dies ist nicht das andere Monster-Kampfspiel. Wenn Sie mit erhöhtem und verbranntem Angriff ausschalten, bleiben diese beim Wiedereinschalten erhalten.
Effektschaden entsteht, egal ob du deinen aktiven Gegner tötest oder nicht. Auf diese Weise können Mitglieder beider Teams in einem Zug sterben.
Wenn einem Team die verwendbaren Monster ausgehen, verlieren sie. Wenn beide Teams im selben Zug ausscheiden, ist es ein Unentschieden. Wenn der Kampf 1000 Runden dauert, ist es ein Unentschieden.
Die Formel zur Ermittlung des Schadens lautet:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
und effDefense
sind die effektiven Werte für die Monster. Ein effektiver Angriff wird erzielt, indem Attacke und Bonusattacke addiert und dann (mit 0,8 oder 1,25) multipliziert werden, wenn Effekte dies ändern. Denken Sie daran, dass diese Effekte gestapelt werden können.
Der Schaden kann nur 0 sein, wenn der Typmodifikator 0 ist (Normal <-> Hell) oder die Bewegungskraft 0 ist (Heilen, Brennen usw.). Andernfalls wird das Minimum bei 1 durchgesetzt.
Turnier
Turniere dauern 100 Runden. In jeder Runde werden die Teams nach dem Zufallsprinzip gemischt und gepaart. Bei einer ungeraden Anzahl von Mannschaften erhält der übrig gebliebene Spieler einen Abschied (Punktestand als Gleichstand). Wenn Sie einen Kampf gewinnen, erhalten Sie 2 Punkte, Unentschieden sind 1 wert und verlieren nichts. Das Team mit den meisten Punkten am Ende gewinnt!
Wenn Teams unentschieden sind, findet ein Turnier statt, bei dem nur die Teams den ersten Platz belegen, um die Reihenfolge der Tiebreaker zu bestimmen.
Protokoll
Die Steuerung sendet Ihrem Programm einen von vier Befehlen. Das erste Zeichen bestimmt den Befehlstyp, ggf. mit folgenden Daten.
Ihr Programm akzeptiert den Befehl als Argument und antwortet innerhalb einer Sekunde auf STDOUT . Bleiben Sie nicht am Leben und hören Sie STDIN, es wird nicht da sein. Jeder Befehl erzeugt einen neuen Prozess.
Sie können Daten / Status auf die Festplatte schreiben. Platzieren Sie alle Dateien in einem Unterordner mit demselben Namen wie Ihr Team. Schreiben Sie nicht mehr als 32 Kilobyte Daten, sonst werden Sie disqualifiziert. Die Daten bleiben zwischen den Runden erhalten, werden jedoch zwischen den Turnieren gelöscht.
Befehle
Teamdaten
Diese wird einmal zu Beginn des Turniers gesendet, um Ihre Mannschaft anzumelden. Ihre Antwort sollte konstant sein und sich nicht von Turnier zu Turnier unterscheiden.
Abfrage:
T
Antwort:
name|member0|member1|member2
name
ist eine Zeichenfolge mit Ihrem Teamnamen. Bitte verwenden Sie nur alphanumerische Zeichen, um das Parsen zu vereinfachen. memberN
ist eine Mitgliedszeichenfolge, die die Details der einzelnen Monster angibt:
Mitgliedsstring:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
Auch hier ist 'name' eine Zeichenfolge, diesmal mit dem Namen dieses Monsters. typeid
ist sein Typ. Typ-IDs sind in der in der obigen Tabelle angegebenen Reihenfolge angegeben, mit Normal = 0 und Grass = 4.
Die nächsten drei Felder sind Ihre Basisstatistiken. Beachten Sie die im Abschnitt "Statistiken" oben beschriebenen Grenzwerte.
Die letzten drei sind die Züge deines Monsters. IDs werden in der obigen Verschiebungstabelle angezeigt.
Eine Beispielantwort auf Teamdaten könnte folgendermaßen aussehen:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
Jedes Team, das hier Müll, falsch formatierte oder illegale Daten zurücksendet, wird erst teilnehmen, wenn dies behoben ist.
Wählen Sie Aktiv
Dies wird zu Beginn jedes Kampfes gesendet und wenn ein Monster stirbt und gewechselt werden muss.
Abfrage:
C#battleState
battleState
zeigt den Stand der aktuellen Schlacht. Tragen Sie mich hier, es ist hässlich:
yourTeamState#theirTeamState
Wo XteamState
sieht es aus wie:
name:activeSlot|member0state|member1state|member2state
activeSlot
zeigt welches Monster gerade aktiv ist (0-2). Die Mitgliedstaaten kommen in zwei Varianten. Wenn es Ihr Team ist, gibt es zusätzliche Informationen. Damit,
Dein memberXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
Ihr memberXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
Dies ist einfach eine Ganzzahl, mit der Sie Monster verfolgen können, wenn Sie sie nicht verwenden möchten name
.
attack:defense:speed
sind deine Basisstatistiken .
poisonedturns
sagt dir, für wie viele Runden du vergiftet wurdest.
moveCountX
gibt an, wie viele Nutzungen Sie für jeden Zug übrig haben. Wenn 0, kann es nicht verwendet werden. Bei unbegrenzten Zügen ist dies negativ.
bonus(stat)
ist die Anzahl der Bonuspunkte, die Sie für jede Statistik vergeben haben.
effectid
ist eine Liste mit Effekten variabler Größe, die auf dein Monster angewendet wurden. Es wird kein Trailing geben:
Die Zeichenfolge , unabhängig davon, ob aktive Effekte vorhanden sind oder nicht. Wenn gestapelte Effekte vorhanden sind, werden sie in der Liste als mehrere Effekte angezeigt.
Die Effekt-IDs sind:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
Antwort:
memberSlot
Die einzige Antwort, die benötigt wird, ist eine einzelne Zahl von 0,1,2, die angibt, welches Mitglied aktiv sein soll. Dies muss ein Mitglied sein, das kämpfen kann. Senden Sie nicht zurück, 1
wenn Mitglied 1 tot ist.
Kampfhandlung
In jeder Runde musst du entscheiden, was zu tun ist.
Abfrage:
A#battleState
Das battleState
hier ist genau wie oben beschrieben.
Antwort:
Senden Sie den Slot, in dem sich der Move befindet, zurück, um einen Move auszuführen. Wenn ich beispielsweise Slot 0 einen 0
Punch zugewiesen habe, wird beim Senden ein Punch ausgeführt.
Um zu einem anderen Mitglied zu wechseln, senden Sie den Steckplatz des Mitglieds plus zehn . Also, um zu Mitglied 2 zu wechseln, senden Sie 12
.
Alles, was nicht in [0,1,2,10,11,12] enthalten ist, wird als ungültig betrachtet und hat in dieser Runde keine Aktion zur Folge.
Bonus Stats
Nach jeweils zwei Kämpfen erhalten Sie einen geheimen Bonuspunkt für jedes Teammitglied.
Abfrage:
B#yourTeamState
Ihr Teamstatus ist derselbe wie oben gezeigt. Lassen Sie mich das nicht wiederholen.
Antwort:
stat0:stat1:stat2
Ihre Antwort gibt an, welche Statistik für jedes Teammitglied erhöht werden soll. Angriff ist 0, Verteidigung ist 1, Geschwindigkeit ist 2.
Um also die Geschwindigkeit des Mitglieds, den Angriff des Mitglieds zwei und die Verteidigung des Mitglieds drei zu erhöhen, würden Sie antworten mit:
2:0:1
Regler
Der Controller befindet sich auf BitBucket: https://Geobits@bitbucket.org/Geobits/codemon.git
Wirf einfach alle kompilierten Klassendateien, Einreichungen und die player.conf in einen Ordner und starte sie.
Die Hauptklasse des Controllers heißt Tournament
. Verwendung ist:
java Tournament [LOG_LEVEL]
Log-Level von 0-4 geben ansteigende Informationen. Stufe 0 führt das Turnier im Hintergrund aus und gibt nur die Ergebnisse aus, wobei Stufe 3 die einzelnen Kommentare enthält. Stufe 4 ist die Debug-Ausgabe.
Sie können dem Turnier Einsendungen hinzufügen in players.conf
Fügen Sie einfach die Befehlszeilenzeichenfolge hinzu, die zum Ausführen des Programms erforderlich ist, eine pro Zeile. Zeilen, die mit beginnen, #
sind Kommentare.
Fügen Sie in Ihren Beitrag den Befehl, den ich zu meinem hinzufügen muss players.conf
, sowie alle Kompilierungsschritte (falls erforderlich) ein.
Eingeschlossen ist ein Dummy-Team, das sich aus allen normalen Mitgliedern mit den drei normalen Zügen zusammensetzt. Sie wählen Züge nach dem Zufallsprinzip und haben schreckliche Statistiken. Viel Spaß beim Prügeln.
Verschiedene Regeln
Sie dürfen keine externen Ressourcen lesen oder darauf schreiben (außer in Ihrem eigenen Unterordner, bis zu 32 kB, wie oben angegeben).
Ihre Mannschaft muss "blind" in das Turnier einsteigen. Das bedeutet, dass Sie die Quelle anderer Leute nicht analysieren können, um herauszufinden, was ein bestimmtes Team / Monster in einer bestimmten Situation tun wird. Sie können die Züge / Statistiken Ihres Gegners analysieren und den Verlauf des Turniers verfolgen, diese Informationen jedoch nicht fest einkodieren.
Stören Sie nicht andere Prozesse / Einreichungen. Kein Aufrufen, Verwenden von Reflektion, um an ihre Daten zu gelangen usw. Lege dich nicht mit meinem Computer an. Versuche es einfach nicht. Dies liegt in meinem Ermessen. Zuwiderhandlungen können von der zukünftigen Einreise ausgeschlossen werden.
Die Teilnehmer sind auf maximal zwei Einsendungen beschränkt. Wenn Sie mehr einreichen, erziele ich nur die ersten beiden eingereichten Punkte. Wenn Sie einen widerrufen möchten, löschen Sie ihn.
Einträge dürfen nicht nur existieren, um andere Einträge zu unterstützen. Sie dürfen auch nicht versuchen, andere Teilnehmer indirekt zu disqualifizieren (z. B. indem Sie DQ-Spielern, die versuchen, dies auf die Festplatte zu schreiben, einen Teamnamen mit 27 Millionen Zeichen geben). Jede Einreichung sollte spielen, um für sich zu gewinnen.
Ihr Programm kann maximal einen untergeordneten Prozess gleichzeitig erzeugen (insgesamt Nachkommen, nicht direkt). Sowohl der Hauptprozess als auch alle untergeordneten Prozesse müssen direkt nach der Ausgabe beendet werden. Stellen Sie in jedem Fall sicher, dass Sie die Zeitüberschreitung nicht überschreiten.
Das Turnier findet auf meinem Computer statt, auf dem Ubuntu mit einem Intel i7 3770K-Prozessor ausgeführt wird.
Ergebnisse
Dies sind die Ergebnisse der aktuellen Spieler. Es ist sehr eng zwischen den Top-Konkurrenten und ich denke darüber nach, die Anzahl der Runden auf 500 zu erhöhen (und den Abstand der Bonuspunkte entsprechend anzupassen). Irgendwelche Einwände, Kommentare?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Vollständige Play-by-Play-Ergebnisse auf Google Drive
bye
s für eine ungerade Anzahl von Konkurrenten und es wäre sichergestellt, dass die Matchpaare fair und gleichmäßig verteilt sind.
n^2
statt skaliert n
. Bei nur 7 Teilnehmern und 100 Runden sind das 2100 Gefechte (300 wie sie sind und 1500 mit 500 Runden). Es wird nur schlimmer, wenn mehr Einträge eingehen. Ich könnte die Anzahl der Runden reduzieren, aber ich zögere, dies aufgrund der inhärenten Variabilität (insbesondere in Bezug auf den Status) zu tun, und ein Vielfaches von 50 (für Bonuspunkte) ist einfacher.