Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
talit:python_pygame [2022-08-24 11:53] – sca | talit:python_pygame [2024-08-08 12:37] (aktuell) – [2.1 Tutorial] sca | ||
---|---|---|---|
Zeile 42: | Zeile 42: | ||
Für dein/euer PyGame-Projekt ist es Pflicht, dieses **objektorientiert** zu programmieren. Verwende dafür das **Template** unten. Theoretisch kann man das ganze Game in einem einzigen File programmieren. Gerade für grössere Projekte und wenn man zusammen am gleichen Code arbeitet, so lohnt es sich, das Projekt auf mehrere Files aufzuteilen. Wir verfolgen hier den Grundsatz: **für jede Klasse ein eigenes File**. | Für dein/euer PyGame-Projekt ist es Pflicht, dieses **objektorientiert** zu programmieren. Verwende dafür das **Template** unten. Theoretisch kann man das ganze Game in einem einzigen File programmieren. Gerade für grössere Projekte und wenn man zusammen am gleichen Code arbeitet, so lohnt es sich, das Projekt auf mehrere Files aufzuteilen. Wir verfolgen hier den Grundsatz: **für jede Klasse ein eigenes File**. | ||
- | {{ :talit:template_pygame_2022.zip |Template herunterladen}} | + | {{ :talit:template_pygame_2022_v02.zip |Template herunterladen}} |
<nodisp 1> | <nodisp 1> | ||
++++Template anzeigen| | ++++Template anzeigen| | ||
+ | |||
<code python main.py> | <code python main.py> | ||
from settings import Settings | from settings import Settings | ||
Zeile 57: | Zeile 58: | ||
- for VSC: template includes launch.json file which includes line '" | - for VSC: template includes launch.json file which includes line '" | ||
""" | """ | ||
- | |||
- | os.chdir(sys.path[0]) # changes current working directory to file directory | ||
if __name__ == " | if __name__ == " | ||
+ | os.chdir(sys.path[0]) # changes current working directory to file directory | ||
+ | |||
# define some settings | # define some settings | ||
settings_default = Settings() | settings_default = Settings() | ||
settings_slow = Settings(speed=1) | settings_slow = Settings(speed=1) | ||
- | | + | # create game object |
- | + | ||
- | | + | |
game = Game(settings_default) | game = Game(settings_default) | ||
- | # and play | ||
game.play() | game.play() | ||
</ | </ | ||
Zeile 80: | Zeile 78: | ||
""" | """ | ||
def __init__(self, | def __init__(self, | ||
+ | self.NAME = " | ||
+ | |||
# WINDOWS SIZE | # WINDOWS SIZE | ||
self.WIN_HEIGHT = win_height | self.WIN_HEIGHT = win_height | ||
self.WIN_WIDTH = win_width | self.WIN_WIDTH = win_width | ||
| | ||
+ | # COLOR SETTINGS | ||
self.BG_COLOR = bg_color | self.BG_COLOR = bg_color | ||
| | ||
Zeile 110: | Zeile 111: | ||
self.settings = settings | self.settings = settings | ||
self.time_delay = self.settings.TIME_DELAY | self.time_delay = self.settings.TIME_DELAY | ||
- | | + | |
- | self.win = pygame.display.set_mode((self.settings.WIN_WIDTH, | + | self.screen = pygame.display.set_mode(size) # create screen which will display everything |
- | pygame.display.set_caption(" | + | self.win = pygame.display.set_mode(size) |
+ | pygame.display.set_caption(self.settings.NAME) # Game title | ||
def quit(self): | def quit(self): | ||
Zeile 146: | Zeile 148: | ||
if keys[pygame.K_UP]: | if keys[pygame.K_UP]: | ||
player.rect.top -= self.settings.SPEED | player.rect.top -= self.settings.SPEED | ||
+ | if keys[pygame.K_DOWN]: | ||
+ | player.rect.top += self.settings.SPEED | ||
# and so on ... | # and so on ... | ||
Zeile 237: | Zeile 241: | ||
pass | pass | ||
</ | </ | ||
+ | |||
++++ | ++++ | ||
</ | </ | ||
+ | |||
+ | |||
+ | ==== - Tutorial ==== | ||
+ | |||
+ | Ziel von diesem Tutorial ist, dich in PyGame anhand des Templates von oben einzuarbeiten. | ||
+ | |||
+ | 1. **Installiere** PyGame (mit pip) | ||
+ | 1. Lade das **Template-Spiel** herunter und stelle sicher, dass du es ausführen kannst. Du solltest ein Flugzeug und ein paar farbige Bälle sehen. | ||
+ | 1. Verschaffe dir einen **Überblick** über das Projekt. Es geht nicht darum, jede einzelne Code-Zeile zu verstehen, sondern darum, das Big Picture zu verstehen: | ||
+ | 1. Welches File muss man ausführen, wenn man das Spiel starten möchte? Was passiert darin? | ||
+ | 1. Das Herzstück ist die `play`-Methode in der Game-Klasse. Darin befindet sich der **Game-Loop** - eine Endlosschleife (`while True`). In dieser steht der Code, der während dem Spiel in der Dauerschleife ausgeführt wird. Verschaffe dir darin eine Übersicht. | ||
+ | 1. Es gibt noch weitere Files wie `setting.py` oder `ball.py`. Wozu sind diese da? | ||
+ | 1. In `player.py` und `ball.py` gibt es zwei Methoden: Update und Collide. Wozu? | ||
+ | 1. **Erweitere** das Spiel nun wie folgt: | ||
+ | 1. Füge noch **zwei rote Bälle** hinzu. Dazu muss zuerst ein Bild von einem roten Ball erstellt werden und in den `data`-Ordner abgelegt werden. Beachte, dass das gleiche Bild dann für beide roten Bälle im Spiel verwendet wird. | ||
+ | 1. Ändere das **Bild des Players** (aktuell Flugzeug). Finde ein lustiges Bild im Internet. Wichtig: Das Bild soll einen transparenten Hintergrund haben. Z.B. kann man man mit Photoshop den Hintergrund transparent machen. | ||
+ | 1. Füge dem Game ein **Hintergrundbild** hinzu. | ||
+ | 1. Den Player soll man nun auch noch nach **links und rechts** bewegen. Implementiere dies in der `play`-Methode, | ||
+ | 1. Der Player soll aber nicht aus dem Bild verschwinden können. Erreicht er z.B. den linken Rand, soll er sich nicht weiter nach links bewegen. Implementiere dies in der `update`-Methode des Players. Diese wird bei jedem Durchgangs Game-Loops ausgeführt. | ||
+ | 1. Implementiere eine **Collision**: | ||
+ | |||
+ | |||
===== - Projekt ===== | ===== - Projekt ===== |