# 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`