Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws2122:kispiel:battleship_ai [2022/03/27 05:26] sunnyrogers [Spielregeln] |
ws2122:kispiel:battleship_ai [2022/03/27 05:50] (aktuell) sunnyrogers [Fazit] |
||
---|---|---|---|
Zeile 60: | Zeile 60: | ||
Nach einiger Recherche zur Umsetzung von Spielen mit Python fiel die Entscheidung auf das pygame-Modul. | Nach einiger Recherche zur Umsetzung von Spielen mit Python fiel die Entscheidung auf das pygame-Modul. | ||
- | Damit konnte recht schnell die Grundlage des Spielfelds programmiert werden. Inspiriert durch eine Umsetzung von Tic Tac Toe begann ich das 10x10 Gitter zu implementieren und die Funktion Klicks in jene Felder zu tracken. | + | Damit konnte recht schnell die Grundlage des Spielfelds programmiert werden. Inspiriert durch eine Umsetzung von Tic Tac Toe begann ich, das 10x10 Gitter zu implementieren und die Funktion Klicks in jene Felder zu tracken. |
(grid.png einfügen) | (grid.png einfügen) | ||
- | Als ich anschliessend versuchte eine Funktion zu implementieren, welches einem ermöglicht regelkonform die Schiffe zu setzen wurde mir schnell klar, dass es schon eine zeitliche Herausforderung war überhaupt ein fertiges Spiel zu schaffen. | + | Als ich anschließend versuchte, eine Funktion zu implementieren, welche einem ermöglicht, regelkonform die Schiffe zu setzen, wurde mir schnell klar, dass es schon eine zeitliche Herausforderung war, überhaupt ein fertiges Spiel zu schaffen. |
- | Dementsprechend wurden die Intentionen eines KI gesteuerten Gegenspielers verworfen. | + | Dementsprechend wurden die Intentionen eines KI-gesteuerten Gegenspielers verworfen. |
- | Um die Schiffe regelkonform setzen zu können entschied ich mich für die Variante jedes Schiff einzeln setzen zu müssen und bei jedem weiteren Element des Schiffes zu tracken welche Positionen noch möglich waren. | + | Um die Schiffe regelkonform setzen zu können, entschied ich mich für die Variante, jedes Schiff einzeln setzen zu müssen und bei jedem weiteren Element des Schiffes zu tracken, welche Positionen noch möglich waren. |
(step1.png) | (step1.png) | ||
(step2.png) | (step2.png) | ||
Zeile 84: | Zeile 84: | ||
Die Umsetzung des Ganzen hat nicht ganz funktioniert, weshalb auch noch nicht auf den Zug des anderen gewartet wird etc. | Die Umsetzung des Ganzen hat nicht ganz funktioniert, weshalb auch noch nicht auf den Zug des anderen gewartet wird etc. | ||
- | Die Darstellung und das Layout waren ebenfalls eine Herausforderung. Da Buttons in pygame wesentlich aufwendiger zu implementieren sind als in HTML. | + | Die Darstellung und das Layout waren ebenfalls eine Herausforderung, da Buttons in pygame wesentlich aufwendiger zu implementieren sind als in HTML. |
(spiel.png einfügen) | (spiel.png einfügen) | ||
Zeile 97: | Zeile 97: | ||
Zu Beginn benötigen wir eine Python3 Umgebung. Ich habe anaconda3 (Version 3.8) benutzt. | Zu Beginn benötigen wir eine Python3 Umgebung. Ich habe anaconda3 (Version 3.8) benutzt. | ||
- | Wenn noch nicht vorhanden müssen die Module pygame und numpy installiert werden. | + | Wenn noch nicht vorhanden, müssen die Module pygame und numpy installiert werden. |
- | Das geht mit pip install modulname | + | Das geht mit ''pip install modulname'' |
- | Danach muss für die Multiplayer Funktion ausserhalb des eigenen Gerätes die IP Adresse des Host Gerätes in die Dokumente server.py und network.py eingetragen werden. | + | Danach muss für die Multiplayer Funktion außerhalb des eigenen Gerätes die IP Adresse des Host Gerätes in die Dokumente ''server.py'' und ''network.py'' eingetragen werden. |
Dafür muss die Ziele | Dafür muss die Ziele | ||
Zeile 112: | Zeile 112: | ||
geändert werden. | geändert werden. | ||
- | Dann kann jedes Gerät, welches diese IP-Adresse erreicht sich mit einem Spiel verbinden. | + | Dann kann jedes Gerät, welches diese IP-Adresse erreicht, sich mit einem Spiel verbinden. |
- | Auf dem Host Gerät muss nun die Datei server.py ausgeführt werden. | + | Auf dem Host Gerät muss nun die Datei ''server.py'' ausgeführt werden. |
Diese sollte dann im Hintergrund weiterlaufen. | Diese sollte dann im Hintergrund weiterlaufen. | ||
- | Nun kann mit dem öffnen der Datei client.py das Spiel geöffnet werden. Sobald ein weiterer Spieler verbunden ist startet das Spiel (aktuell nur theoretisch, 25.03.2022). | + | Nun kann mit dem Öffnen der Datei ''client.py'' das Spiel geöffnet werden. Sobald ein weiterer Spieler verbunden ist, startet das Spiel (aktuell nur theoretisch, 25.03.2022). |
- | Um mit sich selbst zu spielen muss die Datei singleplayer.py geöffnet werden. | + | Um mit sich selbst zu spielen, muss die Datei singleplayer.py geöffnet werden. |
- | Ist das Spiel gestartet kann mit dem drücken der Tasten "2", "3", "4" und "5" das Setzen eines Schiffes dieser Länge begonnen werden. Dann per Mausklick jeweils ein Feld auswählen. Mit der Pfeiltaste nach links kann jeweils der letzte Klick rückgängig gemacht werden. Mit "Esc" und der Leertaste kann das Spiel beendet werden. | + | Ist das Spiel gestartet kann mit dem Drücken der Tasten "2", "3", "4" und "5" das Setzen eines Schiffes dieser Länge begonnen werden. Dann per Mausklick jeweils ein Feld auswählen. Mit der Pfeiltaste nach links kann jeweils der letzte Klick rückgängig gemacht werden. Mit "Esc" und der Leertaste kann das Spiel beendet werden. |
- | Ist das Schiff fertig muss es mit "Enter" eingeloggt werden. Dann verändert sich die Farbe und es kann mit einem weiteren Schiff begonnen werden. | + | Ist das Schiff fertig, muss es mit "Enter" eingeloggt werden. Dann verändert sich die Farbe und es kann mit einem weiteren Schiff begonnen werden. |
(halb.png einfügen9 | (halb.png einfügen9 | ||
- | Sind alle Schiffe gesetzt sollte sich das Spielfeld zurücksetzen. | + | Sind alle Schiffe gesetzt, sollte sich das Spielfeld zurücksetzen. |
- | Danach beginnt das versenken. | + | Danach beginnt das Versenken. |
- | In diesem Modus kann gelten dieselben Funktionen für das Klicken und verlassen des Spiels. Es kann aber nur ein Feld ausgewählt werden. Sobald "Enter" gedrückt wurde verfärbt sich das ausgewählte Feld. Wird es Schwarz hat man getroffen. Wird es Geld war es kein Treffer. Verfärbt sich das Schiff wieder wurde es versenkt. | + | In diesem Modus kann gelten dieselben Funktionen für das Klicken und Verlassen des Spiels. Es kann aber nur ein Feld ausgewählt werden. Sobald "Enter" gedrückt wurde, verfärbt sich das ausgewählte Feld. Wird es Schwarz, hat man getroffen. Wird es Geld, war es kein Treffer. Verfärbt sich das Schiff wieder, wurde es versenkt. |
(treffer.png einfügen) | (treffer.png einfügen) | ||
- | Ist das Spiel beendet muss es im Singleplayer manuell neugestartet werden. Im Multiplayer sollte man zurück zum "Hauptmenü" gelangen. | + | Ist das Spiel beendet, muss es im Singleplayer manuell neugestartet werden. Im Multiplayer sollte man zurück zum "Hauptmenü" gelangen. |
(mainmenu.png einfügen) | (mainmenu.png einfügen) | ||
- | Viel Spass bei ausprobieren!!! | + | Viel Spass beim Ausprobieren!!! |
Zeile 144: | Zeile 144: | ||
===== Fazit ===== | ===== Fazit ===== | ||
- | Ich bin zufrieden ein halbwegs verwendbares Ergebnis erzielt zu haben. Im Hinblick auf die Nachhaltigkeit habe ich viel geschafft, worauf man in Zukunft aufbauen kann (z. B. das Networking). Jedoch muss ich feststellen, dass es nicht unbedingt praktisch ist Python zu verwenden, wenn man ein Browserfähiges Spiel programmieren will. | + | Ich bin zufrieden, ein halbwegs verwendbares Ergebnis erzielt zu haben. Im Hinblick auf die Nachhaltigkeit habe ich viel geschafft, worauf man in Zukunft aufbauen kann (z. B. das Networking). Jedoch muss ich feststellen, dass es nicht unbedingt praktisch ist, Python zu verwenden, wenn man ein browserfähiges Spiel programmieren will. |
- | So war mir eine Einbindung in eine Website leider durch das pygame-Modul nicht möglich. Ich habe keinerlei Möglichkeiten gefunden ein pygame-Skript in ein HTML Dokument einzubinden, welche nicht aufwendiger wäre, als das gesamte Projekt nocheinmal im Javascript umzuschreiben. | + | So war mir eine Einbindung in eine Website leider durch das pygame-Modul nicht möglich. Ich habe keinerlei Möglichkeiten gefunden, ein pygame-Skript in ein HTML Dokument einzubinden, welche nicht aufwendiger wäre, als das gesamte Projekt nocheinmal in Javascript umzuschreiben. |
Dementprechend ist das Spiel "nur" lokal und getrennt von einer Webseite nutzbar. | Dementprechend ist das Spiel "nur" lokal und getrennt von einer Webseite nutzbar. |