6.8 KiB
Tipps & Hinweise
Titelbild und Logo einfügen
-
Ein Logo macht das Spiel persönlicher! Die Funktion zum Laden eines Logos ist im Code vorbereitet, aber aktuell deaktiviert.
-
Die Kids können später ein eigenes Logo als
images/logo.pngerstellen und die folgende Zeile inwater-game.pyaktivieren:# logo_img = pygame.image.load("images/logo.png") # pygame.display.set_icon(logo_img) -
Tipp: Das Logo sollte quadratisch und als PNG gespeichert sein.
-
So kann jeder sein eigenes Spiel-Icon gestalten!
Titelbildschirm, Gewinn- und Verlustbildschirm
- Implementiere einen Titelbildschirm und zeige bei Spielende einen Gewinn- oder Verlustbildschirm (siehe Codebeispiel unten).
Beispiel für Titelbildschirm und Gewinn/Verlust:
# Titelbildschirm anzeigen
show_title_screen(WIN)
# ...
if win_condition:
show_win_screen(WIN)
elif lose_condition:
show_lose_screen(WIN)
So kannst du Gewinn- und Verlustbildschirme umsetzen:
- Schreibe eine Funktion, die den Bildschirm einfärbt und einen Text anzeigt:
def show_win_screen(win):
win.fill((40, 180, 80))
font = pygame.font.SysFont(None, 72)
text = font.render("Gewonnen!", True, (255, 255, 255))
win.blit(text, (win.get_width() // 2 - text.get_width() // 2, win.get_height() // 2 - text.get_height() // 2))
pygame.display.update()
pygame.time.wait(2500)
def show_lose_screen(win):
win.fill((180, 40, 40))
font = pygame.font.SysFont(None, 72)
text = font.render("Verloren!", True, (255, 255, 255))
win.blit(text, (win.get_width() // 2 - text.get_width() // 2, win.get_height() // 2 - text.get_height() // 2))
pygame.display.update()
pygame.time.wait(2500)
- Rufe die jeweilige Funktion auf, wenn die Gewinn- oder Verlustbedingung erfüllt ist:
if win_condition:
show_win_screen(WIN)
elif lose_condition:
show_lose_screen(WIN)
- Die Bedingungen kannst du selbst festlegen, z.B. alle Gegner besiegt = Gewinn, Spieler tot = Verlust.
- Nach dem Bildschirm kannst du das Spiel beenden oder neu starten.
Gameplay-Tipp: Begrenzte Wasserflaschen & Auffüllen an Trinkbrunnen
- Implementiere eine Variable für die Anzahl der Wasserflaschen (Munition), z.B.
player.ammo. - Verringere
player.ammobei jedem Schuss (SPACE). - Erlaube das Auffüllen der Munition, wenn der Spieler einen Trinkbrunnen-Pixel berührt (z.B. durch Kollisionsabfrage mit Trinkbrunnen-Positionen).
- Zeige die aktuelle Munition als Zahl oder Symbol im HUD an.
Beispiel (Pseudo-Code):
# Beim Schießen:
if player.ammo > 0:
bottles.append(TapWater(player.x, player.y, player.dir))
player.ammo -= 1
# Beim Berühren eines Trinkbrunnens:
for brunnen in trinkbrunnen_list:
if player.rect.colliderect(brunnen.rect):
player.ammo = MAX_AMMO
- Die Trinkbrunnen-Positionen kannst du aus der GeoJSON oder aus einer Liste von Pixelkoordinaten laden.
- So wird das Sammeln und Nachfüllen von Wasser spielerisch relevant!
Trinkbrunnen-Pixelpositionen ins Spiel laden und anzeigen
- Die Datei
trinkbrunnen_pixel_positions.npyenthält alle Trinkbrunnen-Positionen als Pixelkoordinaten. - So lädst du die Positionen und zeichnest die Trinkbrunnen im Spiel:
Schritt 1: Importiere numpy und lade die Datei
import numpy as np
trinkbrunnen_positions = np.load('trinkbrunnen_pixel_positions.npy')
Schritt 2: Zeichne die Trinkbrunnen in der Spielschleife
for px, py in trinkbrunnen_positions:
pygame.draw.circle(WIN, (0, 180, 255), (px - ox, py - oy), 10)
oxundoysind die Offsets für das Kamerascrolling (falls verwendet).- Die Farbe
(0, 180, 255)ist ein helles Blau, der Radius10kann angepasst werden.
Schritt 3: Interaktion mit Trinkbrunnen
- Um z.B. Munition aufzufüllen, prüfe ob der Spieler einen Trinkbrunnen berührt:
player_rect = pygame.Rect(player.x, player.y, PLAYER_SIZE, PLAYER_SIZE)
for px, py in trinkbrunnen_positions:
brunnen_rect = pygame.Rect(px, py, 20, 20) # Größe anpassen
if player_rect.colliderect(brunnen_rect):
player.ammo = MAX_AMMO
- So werden die Trinkbrunnen sichtbar und interaktiv im Spiel!
.exe erstellen (Windows)
Kurzanleitung auf Deutsch:
-
Installiere PyInstaller:
pip install pyinstaller -
Konvertiere dein Logo zu einer
.ico-Datei (z.B. mit favicon.io). -
Erstelle die .exe:
pyinstaller --onefile --windowed --icon=images/logo.ico water-game.py -
Die ausführbare Datei findest du im
dist-Ordner.
Mac: App als ausführbare Datei erstellen
Kurzanleitung auf Deutsch:
-
Installiere PyInstaller:
pip install pyinstaller -
Erstelle die Mac-App:
pyinstaller --onefile --windowed --icon=images/logo.png water-game.py- Das Icon kann als PNG verwendet werden.
- Die App wird im
dist-Ordner als ausführbare Datei erscheinen.
-
(Optional) Um eine echte Mac-App zu erzeugen, nutze das Flag
--nameund--osx-bundle-identifier:pyinstaller --onefile --windowed --icon=images/logo.png --name=WasserGame --osx-bundle-identifier=com.deinname.wassergame water-game.py
Hinweis:
- Die App kann per Doppelklick gestartet werden.
- Für die Verteilung an andere Macs kann eine Code-Signierung und Notarisierung nötig sein (siehe Apple Doku).
Tipp: Intro-Video vor Spielstart abspielen
- Du kannst ein Video (z.B. MP4) als Intro vor dem eigentlichen Spiel abspielen.
- Nutze dazu z.B. die Bibliothek
pygame-vlcoderopencv-pythonzum Abspielen von Videos im Pygame-Fenster.
Beispiel mit pygame-vlc:
import vlc
import pygame
def play_intro_video(win, video_path):
instance = vlc.Instance()
player = instance.media_player_new()
media = instance.media_new(video_path)
player.set_media(media)
player.set_xwindow(win.get_window_id()) # Für Linux, für Windows/Mac ggf. anpassen
player.play()
# Warte bis das Video fertig ist oder eine Taste gedrückt wird
playing = True
while playing:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN or event.type == pygame.QUIT:
player.stop()
playing = False
pygame.time.wait(100)
- Das Video kann z.B. als
intro.mp4im Projektordner liegen. - Nach dem Intro kannst du wie gewohnt den Titelbildschirm anzeigen.
- Für Windows/Mac kann die Fenster-ID Methode abweichen, siehe Doku von pygame-vlc.
Zusätzliche Hinweise
- Stelle sicher, dass alle Bilder und Daten im richtigen Pfad liegen.
- Für komplexe Projekte nutze eine PyInstaller spec file.