Kreativ Aufgabe - Tank War

Einleitung

Stofl hat sich mit seinen Kollegen über ein besonders schönes Stück Käse zerstritten, das sie zusammen gefunden haben. Sie sehen keine andere Möglichkeit, als ein Spiel Tank War zu spielen, um zu entscheiden, wer den Käse erhält.

Tank War

Tank War wird auf einer Strecke einer festgelegten Länge gespielt, und bis zu 8 Spieler treten gegeneinander an. Jeder Spieler befindet sich an einer bestimmten Position auf der Stecke, hat verschiedene Waffen zur Verfügung und erhält einmalig eine Anzahl Bewegungspunkte.

Eine Schlacht in Tank War findet in mehreren Zügen statt. In jedem Zug handeln alle Spieler gleichzeitig nach dem folgenden Schema:

  • Die Spieler feuern ein Geschoss an eine bestimmte Position auf der Strecke (innerhalb der Reichweite der verwendeten Waffe). Wenn ein Spieler eine andere Waffe als im vorherigen Zug benutzt, wird ihm für den Waffenwechsel ein Bewegungspunkt abgezogen.
  • Dann bewegen sich die Spieler um einige Positionen nach links oder rechts, aber nur um so viele Positionen wie sie Bewegungspunkte übrig haben. Die Bewegung kostet sie einen Bewegungspunkt per Schritt.
  • Alle Geschosse schlagen ein und schädigen die Spieler in der Nähe des Aufschlagpunktes. Die Schadenspunkte der Spieler, die sich in der Aufschlagzone des Geschosses befinden, erhöhen sich um die Schadenspunkte der verwendeten Waffe.
  • Alle Spieler, die mehr als P Schadenspunkte haben, verlassen das Spiel.

Beachte, dass die beiden Enden der Strecke miteinander verbunden sind. Wenn du die Strecke z.B. auf der linken Seite verlässt, erscheinst du wieder am rechten Ende der Strecke. Wenn du ein Geschoss über das Ende hinausschiesst, tritt es am andren Ende wieder in die Welt ein.

Die verschiedenen Waffen sind durch drei Parameter charakterisiert:

  • Die Reichweite ist die maximale Distanz, die du mit der Waffe erreichen kannst.
  • Der Radius der Aufschlagzone sagt, wie nah ein Geschoss bei einem Spieler aufschlagen muss, um ihn zu schädigen. Wenn diese Grösse bei einer Waffe 5 ist und du ein Geschoss nach Postion 10 feuerst, wirst du die Spieler auf dem Positionen 5 bis 15 treffen (Rand eingeschlossen).
  • Die Schadenspunkte entsprechen der Stärke einer Waffe und geben an, wie viele Schadenspunkte den getroffenen Spielern hinzugefügt werden.

Du hast für jede Waffe eine unbeschränkte Anzahl Geschosse zur Verfügung. Wenn du am Beginn eines Zugs die Waffe wechselst, kostet das einen Bewegungspunkt.

Interaktion mit dem Server

Zu Beginn der Schlacht erhältst du Informationen über die Welt und die verschiedenen Waffen, die dir zur Verfügung stehen. Als erstes liest du drei ganze Zahlen L, P, W ein, die Länge der Welt, die Anzahl Schadenspunkte, ab welcher man das Spiel verlässt und die Anzahl Waffen, welche dir zur Verfügung stehen. Die nächsten W Zeilen beschreiben je eine Waffe durch drei ganze Zahlen: Reichweite, Radius der Aufschlagzone und Schadenspunkte. Die Waffen werden von 1 bis W nummeriert.

Vor jedem Zug liest du Informationen über den Spielzustand vom Standardinput. Die erste Zeile enthält eine ganze Zahl N, die Anzahl der Gegner die noch im Spiel sind. Die nächste Zeile enthält drei ganze Zahlen: deine Position, wie viele Bewegungs- und wie viele Schadenspunkte du hast. Zu Beginn hast du 0 Schadenspunkte.

Die folgenden 2*(N-1) Zeilen enthalten die selben Angaben über deine Gegner. Die Beschreibung der i-ten Spielers besteht aus zwei Zeilen:

Die erste Zeile enthält den Namen des Spielers (höchstens 20 Kleinbuchstaben).

Die zweite Zeile enthält drei ganze Zahlen: die Position, Anzahl Bewegungs- und Schadenspunkte des Spielers.

Nachdem du diese Informationen eingelesen hast, musst du deinen Zug durch drei ganze Zahlen bekanntgeben:

  • eine ganze Zahl, welche die Bewegung beschreibt, die du machen willst. Falls sie positiv ist, bewegst du dich um soviel nach rechts; falls sie negativ ist, um soviel nach links; falls sie Null ist, bleibst du stehen.
  • die Nummer der Waffe, die du feuern willst.
  • die Position, wohin du dein Geschoss feuern willst. Diese muss innerhalb der Reichweite der verwendeten Waffe liegen.

Beachte: Wenn dein Zug ungültig ist oder dein Programm nicht ordnungsgemäss reagiert, wird dein Zug ignoriert, d.h. du bleibst stehen und feuerst keine Waffe ab.

Schranken

  • 2 ≤ N ≤ 8
  • 1 ≤ W ≤ 10
  • 2 ≤ L ≤ 1000
  • 1≤ P ≤ 1000

Für jede Waffe:

  • 1≤ Schadenspunkte ≤ 1000
  • 1 ≤ Reichweite ≤ 1000
  • 0 ≤ Radius der Aufschlagzone ≤ 1000

0 ≤ Bewegungspunkte der Spieler am Anfang ≤ 10 000

Bemerkungen

  • Die erste Zeile des Server-Interaktions-Protokolls hat am Sam, 3. Oktober geändert (siehe Paragraph 1 des betreffenden Abschnittes)
  • Die Positionen sind von 0 bis L-1 durchnummeriert.
  • Denk daran, die Standard-Ausgabe nach jedem Zug zu leeren (in C mittels fflush(stdout), in C++ mit cout.flush() )
  • Es können sich mehrere Spieler an derselben Position befinden.
  • Die Bewegungspunkte gelten für das gesamte Spiel (sie werden nicht jede Runde erneuert).
  • Die Waffe der ersten Runde wird dich kein Bewegunspunkt kosten, egal welche du auswählst.

Submission