Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
lehrkraefte:blc:informatik:ffprg1-2020:snake [2020/05/04 16:51] Ivo Blöchliger created |
lehrkraefte:blc:informatik:ffprg1-2020:snake [2021/04/28 14:11] (current) Ivo Blöchliger [Snake] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Snake ====== | ====== Snake ====== | ||
- | Programmieren Sie eine Strategie, die die Schlange steuert. | + | 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 | ||
+ | </ | ||