add tip list
This commit is contained in:
parent
7b9d7734ab
commit
c733cf64e1
12 changed files with 598 additions and 187 deletions
174
README_TIPS.md
Normal file
174
README_TIPS.md
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
# 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.png` erstellen und die folgende Zeile in `water-game.py` aktivieren:
|
||||
|
||||
```python
|
||||
# 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:**
|
||||
|
||||
```python
|
||||
# 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:**
|
||||
|
||||
1. Schreibe eine Funktion, die den Bildschirm einfärbt und einen Text anzeigt:
|
||||
|
||||
```python
|
||||
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)
|
||||
```
|
||||
|
||||
2. Rufe die jeweilige Funktion auf, wenn die Gewinn- oder Verlustbedingung erfüllt ist:
|
||||
|
||||
```python
|
||||
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.ammo` bei 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):**
|
||||
|
||||
```python
|
||||
# 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!
|
||||
|
||||
## .exe erstellen (Windows)
|
||||
|
||||
**Kurzanleitung auf Deutsch:**
|
||||
|
||||
1. Installiere PyInstaller:
|
||||
|
||||
```sh
|
||||
pip install pyinstaller
|
||||
```
|
||||
|
||||
2. Konvertiere dein Logo zu einer `.ico`-Datei (z.B. mit [favicon.io](https://favicon.io/)).
|
||||
3. Erstelle die .exe:
|
||||
|
||||
```sh
|
||||
pyinstaller --onefile --windowed --icon=images/logo.ico water-game.py
|
||||
```
|
||||
|
||||
4. Die ausführbare Datei findest du im `dist`-Ordner.
|
||||
|
||||
## Mac: App als ausführbare Datei erstellen
|
||||
|
||||
**Kurzanleitung auf Deutsch:**
|
||||
|
||||
1. Installiere PyInstaller:
|
||||
|
||||
```sh
|
||||
pip install pyinstaller
|
||||
```
|
||||
|
||||
2. Erstelle die Mac-App:
|
||||
|
||||
```sh
|
||||
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.
|
||||
|
||||
3. (Optional) Um eine echte Mac-App zu erzeugen, nutze das Flag `--name` und `--osx-bundle-identifier`:
|
||||
|
||||
```sh
|
||||
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](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution)).
|
||||
|
||||
## 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-vlc`](https://github.com/pygame/pygame-vlc) oder [`opencv-python`](https://pypi.org/project/opencv-python/) zum Abspielen von Videos im Pygame-Fenster.
|
||||
|
||||
**Beispiel mit pygame-vlc:**
|
||||
|
||||
```python
|
||||
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.mp4` im 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](https://pyinstaller.org/en/stable/spec-files.html).
|
||||
Loading…
Add table
Add a link
Reference in a new issue