# Spiele programmieren in Python <!-- [![hackmd-github-sync-badge](https://hackmd.io/JPr17UVxR0Wgfy8Gyzts9A/badge)](https://hackmd.io/JPr17UVxR0Wgfy8Gyzts9A) ## Voraussetzungen - RGB-Farben - Objektorientiere Programmierung in Python - Grundlagen der Pythonprogrammierung (grundlegende Programm- und Datenstrukturen) ## Ziel 🎯 Du lernst ... - die Python-Programmbibliothe **Pygame Zero** zur Erstellung von Spielen mit Python kennen. - den Umgang mit vorhanden Online-Dokumentationen. - ein bestehendes objektorientiertes Programm zu analysieren. - wie grafische Elemente am Computer dargestellt und in einem Bildschirmfenster positioniert werden. - was bei der Drehung von grafischen Elementen zu beachten ist. --> ## Erste Schritte in Pygame Zero ### Installation und Setup #### Erste Schritte auf replit.com (Web-Editor) Alle Übungen kannst du mit replit.com bearbeiten. Ein eine leere Pygame Template erhĂ€llst du ĂŒber folgenden Link: https://replit.com/new/pygame oder du wĂ€hlst "Pygame als Template auf der Seite replit.com aus. :::warning Wir verwenden **Pygame Zero** eine vereinfachte Version von Pygame. Damit ein Pygame Zero Programm auf Replit.com startet, musst du folgende Codezeilen ergĂ€nzen: **Am Anfang:** ```python import pgzrun ``` **Am Ende:** ```python pgzrun.go() ``` ::: #### Erste Schritte am Desktop Möchtest du lieber eine Desktop-Anwendung zum Programmieren verwenden. Findest du [hier](https://pygame-zero.readthedocs.io/de/latest/installation.html) entsprechende Anleitungen zur Installation von Pygame am Desktop. #### ZusĂ€tzliche Datein FĂŒr das Einstiegsprojekt brauchen wir einige Graphiken zusĂ€tzlich. Diese liegen in der Datei [images.zip](https://www.inf-schule.de/content/7_oop/4_spiele-python/1_vorbereitungen/2_zusatzdateien/images.zip), die Du hier herunterladen kannst – oder vielleicht schon heruntergeladen hast. ### Leeres Fenster erzeugen https://www.inf-schule.de/oop/spiele-python/erste-programme/leeres-fenster ### Hintergrundfarbe https://www.inf-schule.de/oop/spiele-python/erste-programme/hintergrundfarbe ### Hintergrundbilder https://www.inf-schule.de/oop/spiele-python/erste-programme/hintergrund-bilder ### Eine Spielfigur hinzufĂŒgen https://www.inf-schule.de/oop/spiele-python/spielfiguren-als-objekte/spielfigur ### Spielfiguren platzieren https://www.inf-schule.de/oop/spiele-python/spielfiguren-als-objekte/spielfiguren-platzieren ### Fachkonzept: Objekte, Attribute, Methoden, Klassen und Konstruktor https://www.inf-schule.de/oop/spiele-python/spielfiguren-als-objekte/fk-attribut-klasse-konstruktor ### Spielfiguren bewegen https://pygame-zero.readthedocs.io/de/latest/introduction.html#figuren-bewegen ```python= def update(): raumschiff.x += 2 if raumschiff.x > WIDTH: raumschiff.x = 0 ``` ### Keyboard Eingaben verwenden https://pygame-zero.readthedocs.io/de/latest/builtins.html#the-keyboard ```python= def update(): raumschiff.x += 2 if raumschiff.x > WIDTH: raumschiff.x = 0 if keyboard.y or keyboard.down: raumschiff.y += PLAYER_SPEED elif keyboard.a or keyboard.up: raumschiff.y -= PLAYER_SPEED ``` ### Ausrichtung einer Spielfigur https://www.inf-schule.de/oop/spiele-python/spielfiguren-als-objekte/ausrichtung ### Musterlösung: https://replit.com/@MarcSiemering2/2022-06-16-Raumschifflive ## Aufgabe 1. VerĂ€ndere den Code so, dass sich beim DrĂŒcken der Pfeiltaste nach rechts das Raumschiff im Uhrzeigersinn dreht und beim DrĂŒcken der Pfeiltaste nach links gegen den Uhrzeigersinn. 2. VerĂ€ndere das Programm so, dass das Raumschiff immer "geradeaus" ausfliegt. Also, wenn es gedreht wird, dass es dann auch in diese Richtung fliegt. :::info **1. Tipp:** DafĂŒr benötigst du die Sinus- und Cosinus-Funktion. <details> <summary>Sinus und Cosinus Grafik</summary> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Sinus_und_Kosinus_am_Einheitskreis_1.svg/1024px-Sinus_und_Kosinus_am_Einheitskreis_1.svg.png" height=300> Quelle: https://de.wikipedia.org/wiki/Sinus_und_Kosinus </details> Um in Python mit der Sinus- und Cosinus-Funktion zu arbeiten benötigst du das Packet `math`. Um dieses Packet zu verwenden musst du es zunĂ€chst importieren. ```python import math ``` Die offizielle Dokumentation zum `math` Packet findest du hier: https://docs.python.org/3/library/math.html **2. Tipp:** In der offiziellen Dokumentation ist genau definiter, was die Funktion `math.sin(x)` macht. Lies diese Dokumentation **aufmerksam** durch. (*radians* ist das englische Wort fĂŒr *Bogenmaß*.) ::: ## Zum Weiterlesen und Vertiefen Hier findest du Links zu interessanten Beispielprojekten mit PyGame Zero: - https://pygame-zero.readthedocs.io/en/latest/examples.html - GitHub: https://github.com/lordmauve/pgzero/tree/master/examples - https://wireframe.raspberrypi.com/books/code-the-classics1 - GitHub: https://github.com/Wireframe-Magazine/Code-the-Classics ## Quellen - **PyGame Zero Dokumentation Englisch** [https://pygame-zero.readthedocs.io/en/stable/](https://pygame-zero.readthedocs.io/en/stable/) - **PyGame Zero Dokumentation Deutsch** [https://pygame-zero.readthedocs.io/de/latest/](https://pygame-zero.readthedocs.io/de/latest/) - **Beispiel Pgoramme von PyGame Zero** [https://pygame-zero.readthedocs.io/en/latest/examples.html](https://pygame-zero.readthedocs.io/en/latest/examples.html) - **GitHub Repository zu Beispiel Pgorammen von PyGame Zero** [https://github.com/lordmauve/pgzero/tree/master/examples](https://github.com/lordmauve/pgzero/tree/master/examples) - **Code the Classics** [https://wireframe.raspberrypi.com/books/code-the-classics1](https://wireframe.raspberrypi.com/books/code-the-classics1) - **GitHub Repository zu Code the Classics** [https://github.com/Wireframe-Magazine/Code-the-Classics](https://github.com/Wireframe-Magazine/Code-the-Classics) - **inf-schule.de Spiele in Python objektorientiert programmieren** [https://www.inf-schule.de/oop/spiele-python](https://www.inf-schule.de/oop/spiele-python) - **Dokumentation zum Python-Packet `math`** [https://docs.python.org/3/library/math.html](https://docs.python.org/3/library/math.html) ###### tags: `Inf 11` `Python` `OOP`