Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg1-2020:snake [2020/05/04 15:09] – [Snake] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg1-2020:snake [2021/04/28 12:11] (current) – [Snake] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Snake ====== | ||
| + | Programmieren Sie eine Strategie, die die Schlange steuert. {{ : | ||
| + | |||
| + | Ziel ist es, diese Strategien in einem Tournier gegeneinander antreten zu lassen. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | === Spiel via Netzwerk === | ||
| + | Lassen Sie Ihre Strategie via Netzwerk gegen eine andere spielen, indem Sie die '' | ||
| + | |||
| + | === Anleitung === | ||
| + | |||
| + | * Archiv entpacken (Source-Code) | ||
| + | * Alle .py-Dateien in TigerJython öffnen. | ||
| + | * game.py in Tigerjython starten. | ||
| + | * Für eigene Strategie ivo_simple_strategy.py kopieren und wie folgt benennen: name_xyz_strategy.py, | ||
| + | * In game.py: | ||
| + | * Die eigene Strategie importieren (ganz oben im Code, analog zu ivo_simple_strategy. | ||
| + | * Eigene Strategie ganz unten in game.py eintragen (min. einmal ivo_simple_strategy ersetzen). | ||
| + | * Code studieren, Fragen stellen. | ||
| + | |||
| + | === Video-Anleitung === | ||
| + | * https:// | ||
| + | |||
| + | === Dokumentation === | ||
| + | Entweder direkt Kommentare im Code oder [[https:// | ||
| + | |||
| + | |||
| + | ===== 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: | ||
| + | * Strategien, Spielfeld etc initialisieren. | ||
| + | * Jede Strategie nach der Richtung für nächsten Schritt fragen: 0-3 (links, unten, rechts, oben). | ||
| + | * Schritte ausführen, Kollisionen und Apfelfressen überprüfen. | ||
| + | |||
| + | 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]): | ||
| + | vanish (int[width][height]): | ||
| + | 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. '' | ||
| + | |||
| + | Erklärungen: | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | |||
| + | ===== Breitensuche zur Distanzberechnung (im Grid) ===== | ||
| + | Pseudo-Code (kann so nicht direkt in Python ausgeführt werden). | ||
| + | <code python> | ||
| + | dist[x][y] auf -1 initialisieren | ||
| + | |||
| + | dist[startpunkt] = 0 | ||
| + | todo = [startpunkt] | ||
| + | |||
| + | while (len(todo)> | ||
| + | aktuell = todo.pop(0) # Vorne entfernen | ||
| + | for nachbar in nachbarn(aktuell): | ||
| + | if dist[nachbar]==-1: | ||
| + | dist[nachbar] = dist[aktuell]+1 | ||
| + | todo.append(nachbar) | ||
| + | return dist | ||
| + | </ | ||
| + | |||