Altstand nach old_version/ eingefroren (untracked). Monolith ersetzt durch main.py + Paket loader_game/. Neu: run.sh/run.command mit venv+requirements, .gitignore, docs/ANALYSE.md, 35 Tests. Secrets entfernt. Gelöscht: loader_game.py, qr_scan*.py, INSTALL_README.txt.
This commit is contained in:
1 parent
6a2c891c3e
commit
de550e1d4d
24 files changed
+2269
-1008
No files matched your search
@@ -0,0 +1,151 @@
|
||||
"""Zentrale Konfiguration: alle Masse, Farben, Tempi und Pfade.
|
||||
|
||||
Alle Geometrieangaben beziehen sich auf eine virtuelle Auflösung von
|
||||
1920x1080. Das Fenster wird per ``pygame.SCALED`` automatisch auf die
|
||||
tatsächliche Fenstergrösse skaliert – dadurch sieht das Spiel auf einem
|
||||
MacBook (Retina, 1440x900, …) genauso aus wie auf einem 1080p-Monitor.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Pfade
|
||||
# --------------------------------------------------------------------------
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
RUNTIME_DIR = BASE_DIR / "runtime"
|
||||
|
||||
IMAGES_DIR = BASE_DIR / "images"
|
||||
FONTS_DIR = BASE_DIR / "fonts"
|
||||
FONT_REGULAR = FONTS_DIR / "Tisa Sans Pro Regular.ttf"
|
||||
|
||||
BACKGROUND_IMAGE = IMAGES_DIR / "background.png"
|
||||
TUTORIAL_IMAGE = IMAGES_DIR / "tutorial.png"
|
||||
SEQUENCES_FILE = BASE_DIR / "case_sequences.txt"
|
||||
|
||||
SOUND_FILES = {
|
||||
"roll": BASE_DIR / "roll.ogg",
|
||||
"place": BASE_DIR / "place.ogg",
|
||||
"fail": BASE_DIR / "fail.ogg",
|
||||
"zip": BASE_DIR / "zip.ogg",
|
||||
}
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Fenster / Bildrate
|
||||
# --------------------------------------------------------------------------
|
||||
SCREEN_WIDTH = 1920
|
||||
SCREEN_HEIGHT = 1080
|
||||
WINDOW_TITLE = "Habegger Trailer Load"
|
||||
FPS = 60
|
||||
AUDIO_SAMPLE_RATE = 44100
|
||||
DEFAULT_FULLSCREEN = False # per --fullscreen oder F11 umschaltbar
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Layout (horizontale Bänder)
|
||||
# --------------------------------------------------------------------------
|
||||
TOP_BAR_HEIGHT = SCREEN_HEIGHT // 8 # 135
|
||||
GAME_AREA_HEIGHT = int(SCREEN_HEIGHT / 1.6) # 675
|
||||
BOTTOM_BAR_HEIGHT = SCREEN_HEIGHT // 4 # 270
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Auflieger (grauer Kasten, in dem die Koffer gestapelt werden)
|
||||
# --------------------------------------------------------------------------
|
||||
TRAILER_WIDTH = int(SCREEN_WIDTH * 0.885416666667) # 1700
|
||||
TRAILER_HEIGHT = int(SCREEN_HEIGHT * 0.2778) # 300
|
||||
TRAILER_X = (SCREEN_WIDTH - TRAILER_WIDTH) // 4 # 55
|
||||
TRAILER_Y = TOP_BAR_HEIGHT + 200 # 335
|
||||
TRAILER_RIGHT = TRAILER_X + TRAILER_WIDTH
|
||||
TRAILER_BOTTOM = TRAILER_Y + TRAILER_HEIGHT
|
||||
|
||||
# Eine Kasten-Einheit entspricht 100x100 Pixeln.
|
||||
UNIT_LENGTH = TRAILER_HEIGHT // 3 # 100
|
||||
UNIT_HEIGHT = TRAILER_HEIGHT // 3 # 100
|
||||
MAX_UNITS_W = 4
|
||||
MAX_UNITS_H = 3
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Spieltempo (jetzt in Pixel pro Sekunde statt pro Frame)
|
||||
# --------------------------------------------------------------------------
|
||||
CASE_SPEED_FAST = 720 # früher: 6 px/Frame bei 120 fps
|
||||
CASE_SPEED_SLOW = 240 # früher: 2 px/Frame bei 120 fps
|
||||
FAST_TO_SLOW_DISTANCE = 120 # ab hier wird abgebremst
|
||||
SNAP_THRESHOLD = 60 # ab hier darf eingerastet werden
|
||||
PLATFORM_TOLERANCE = 5 # Toleranz für "bündig an der Barriere"
|
||||
|
||||
# Animationsdauern in Sekunden (vorher: 10 Frames à 16,6 ms)
|
||||
ANIM_SNAP = 0.17
|
||||
ANIM_ROTATE = 0.18
|
||||
ANIM_STACK_STEP = 0.17
|
||||
SHAKE_TIME = 0.12
|
||||
SHAKE_AMPLITUDE = 5
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Intro
|
||||
# --------------------------------------------------------------------------
|
||||
INTRO_DOT_COLORS = ((255, 0, 0), (255, 200, 0), (0, 255, 0))
|
||||
INTRO_DOT_DELAY = 1.0
|
||||
INTRO_DOT_RADIUS = 90
|
||||
INTRO_ZIP_DURATION = 0.2
|
||||
INTRO_BEEPS = (
|
||||
{"frequency": 440, "duration_ms": 600, "volume": 0.5},
|
||||
{"frequency": 440, "duration_ms": 400, "volume": 0.5},
|
||||
{"frequency": 600, "duration_ms": 1000, "volume": 0.5},
|
||||
)
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Farben
|
||||
# --------------------------------------------------------------------------
|
||||
COLOR_TOP_BAR = (0, 0, 0)
|
||||
COLOR_BOTTOM_BAR = (0, 0, 0)
|
||||
COLOR_BACKGROUND = (0, 0, 0)
|
||||
COLOR_TRAILER = (100, 100, 100)
|
||||
COLOR_WALL = (255, 0, 0)
|
||||
COLOR_WHITE = (255, 255, 255)
|
||||
COLOR_HINT_SNAP = (0, 255, 0)
|
||||
COLOR_HINT_STACK = (255, 255, 0)
|
||||
COLOR_ERROR = (255, 100, 100)
|
||||
COLOR_PROGRESS_TRACK = (50, 50, 50)
|
||||
CASE_COLORS = ((200, 0, 0), (0, 200, 0), (0, 0, 200))
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Fortschrittsbalken
|
||||
# --------------------------------------------------------------------------
|
||||
PROGRESS_BAR_SEGMENTS = 5
|
||||
PROGRESS_BAR_WIDTH = int(SCREEN_WIDTH * 0.25)
|
||||
PROGRESS_BAR_HEIGHT = 30
|
||||
PROGRESS_BAR_RIGHT_MARGIN = 140
|
||||
PROGRESS_BAR_GAP = 8
|
||||
PROGRESS_BAR_RADIUS = 10
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Texte
|
||||
# --------------------------------------------------------------------------
|
||||
FONT_SIZE = 48
|
||||
FONT_SIZE_SMALL = 34
|
||||
TITLE_TEXT = WINDOW_TITLE
|
||||
NEXT_LABEL = "Next:"
|
||||
NEXT_PREVIEW_COUNT = 3
|
||||
NEXT_PREVIEW_SCALE = 0.6 # Vorschau-Koffer sind kleiner als im Auflieger
|
||||
NEXT_PREVIEW_MARGIN = 20
|
||||
HINT_SNAP = "Snap bereit!"
|
||||
HINT_STACK = "OnTop möglich!"
|
||||
GAME_OVER_GOOD = "Gratuliere {name}! Du hast {percent}% geladen!"
|
||||
GAME_OVER_NORMAL = "{name}, du hast {percent}% geladen."
|
||||
GAME_OVER_HINT = "Drücke A oder SPACE um zu beenden."
|
||||
GAME_OVER_GOOD_PERCENT = 75
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Spieler / Punkte-Server
|
||||
# --------------------------------------------------------------------------
|
||||
DEFAULT_PLAYER_NAME = "Spieler"
|
||||
MAX_PLAYER_NAME_LENGTH = 14
|
||||
|
||||
# Der Punkte-Upload ist standardmässig deaktiviert. Zum Aktivieren:
|
||||
# export HAG_SCORE_URL="https://…/api/submit_points.php"
|
||||
# export HAG_SCORE_API_KEY="…"
|
||||
# (Schlüssel gehören in die Umgebung, nicht in den Quellcode.)
|
||||
SCORE_URL = os.environ.get("HAG_SCORE_URL", "")
|
||||
SCORE_API_KEY = os.environ.get("HAG_SCORE_API_KEY", "")
|
||||
SCORE_TIMEOUT = 5.0
|
||||
Reference in new issue
Block a user