Table of Contents

Snake

Programmieren Sie eine Strategie, die die Schlange steuert.

Ziel ist es, diese Strategien in einem Tournier gegeneinander antreten zu lassen.

Source-Code

Spiel via Netzwerk

Lassen Sie Ihre Strategie via Netzwerk gegen eine andere spielen, indem Sie die NetworkStrategy einbauen (neu in obigem Archiv enthalten). Lassen Sie mir Ihre Strategie zukommen, ich werde diese einbauen, damit alle gegen diese spielen können. Der Server läuft allerdings nur auf Anfrage.

Anleitung

Video-Anleitung

Dokumentation

Entweder direkt Kommentare im Code oder online.

Aufbau des Spiels

Die Logik des Spiel läuft in game.py. Damit haben Sie, ausser zum Eintragen Ihrer eigenen Strategie, erst mal nicht viel zu tun.

Das Spiel (in game.py) läuft wie folgt ab:

Eine Strategie hat Zugriff auf folgende Informationen um den nächsten Schritt zu planen (d.h. welche der 4 Richtungen):

  self.params (Alle Informationen zum aktuellen Spielstand, mit den Feldern
      width (int): Breite des Spielfelds
      height (int): Hoehe des Spielfelds
      feld (int[width][height]): Aktueller Zustand des Felds
      vanish (int[width][height]): Bis wann ein Feld noch besetzt ist.
      alive (bool): Ob die Schlange noch am Leben ist.
      points (int): Punkte des Spielers
      time (int): Aktuelle Zeit (in Spielschritten)
      appletime (int): Zeit, zu welcher der Apfel verfault (und alle Schlangen sterben).
      x (int): x-Koordinate der Schlange
      y (int): y-Koordinate der Schlange
      dir (int): Letzte Richtung der Schlange
      reason (str): Todesursache
      changed (int[][2]): Koordinaten der Felder, wo eine Veraenderung stattgefunden hat.
      heads (int[][2]): Koordinaten der aller lebenden Schlangenkoepfe (auch des eigenen)
      apple (int[2]): Koordinaten des Apfels

So liefert z.B. self.params.apple[0] die $x$-Koordinate des Apfels oder self.params.feld[3][7] den Inhalt vom Spielfeld an der Position (3,7), oder self.params.heads[0][0] und self.params.heads[0][0] die $x$- und $y$-Koordinaten einer Schlange (eine gegnerische oder die eigene).

Erklärungen:

Breitensuche zur Distanzberechnung (im Grid)

Pseudo-Code (kann so nicht direkt in Python ausgeführt werden).

dist[x][y] auf -1 initialisieren
 
dist[startpunkt] = 0
todo = [startpunkt]
 
while (len(todo)>0):
    aktuell = todo.pop(0) # Vorne entfernen
    for nachbar in nachbarn(aktuell):
        if dist[nachbar]==-1: # Noch offen?
            dist[nachbar] = dist[aktuell]+1
            todo.append(nachbar)
return dist