ecd994ae73d5bd0ca3ffb99662605fa46fa2dfcd
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 2m21s
web/assets/.
🏃 Escape From Teacher
Ein Endless-Runner-Spiel entwickelt als Schulprojekt. Renne vor dem Lehrer davon, sammle Münzen, nutze Power-Ups und klettere an Wänden!
📋 Inhaltsverzeichnis
✨ Features
Gameplay
- 🏃 Endless Runner: Unendliches Spiel mit prozedural generierten Levels
- 🧗 Wall Climbing: Klettere an Wänden hoch für neue Strategien
- 💰 Coins & Power-Ups: Sammle Münzen und nutze Power-Ups wie Double Jump und Godmode
- 🎯 Hindernisse: Weiche bewegenden Plattformen und Objekten aus
- ⚡ Dynamische Schwierigkeit: Das Spiel wird mit der Zeit schneller
Modi
- 👤 Solo-Modus: Spiele alleine und sammle Highscores
- 👥 Coop-Modus: Spiele mit Freunden im Team
- Team-Namen für Leaderboard
- Multiplizierter Score basierend auf lebenden Spielern
- Host-Controls für Lobby-Management
Features
- 🏆 Leaderboard: Redis-basiertes globales Leaderboard mit Proof-Codes
- 🎮 Cross-Platform: Web (WASM) und Desktop (Native)
- 🎨 Level Editor: Erstelle eigene Levels mit dem integrierten Level Builder
- 🔊 Audio: Musik und Sound-Effekte mit Lautstärkeregelung
- 📱 Mobile Support: Touch-Controls für mobile Geräte
🛠 Technologie-Stack
Backend
- Go 1.25+: Server und Game-Logik
- NATS: Message Broker für Echtzeit-Kommunikation (Legacy)
- WebSocket: Direkte WebSocket-Verbindungen für niedrige Latenz
- Redis: Persistentes Leaderboard mit Proof-Code-Validierung
Frontend
- Go + Ebiten: Desktop-Client (Native)
- Go + WASM: Web-Client kompiliert zu WebAssembly
- HTML/CSS/JavaScript: Web-UI und Menüs
Architektur
- Client-Side Prediction: Flüssiges Gameplay trotz Netzwerk-Latenz
- Server-Authoritative: Server validiert alle Spielaktionen
- Deterministische Physik: Gleiche Physik auf Client und Server
📦 Installation
Voraussetzungen
# Go 1.25 oder höher
go version
# Redis für Leaderboard
redis-server --version
Repository klonen
git clone https://git.zb-server.de/ZB-Server/EscapeFromTeacher.git
cd EscapeFromTeacher
Assets generieren
Die Assets müssen aus den Raw-Dateien generiert werden:
# Asset-Builder starten (GUI)
go run ./cmd/builder
# Im GUI: Assets laden, anpassen und speichern
# Dies erstellt cmd/client/web/assets/assets.json und die PNG-Dateien
Server starten
# Redis starten (Terminal 1)
redis-server
# Server starten (Terminal 2)
go run ./cmd/server
Server läuft auf http://localhost:8080
Clients starten
Web-Client (WASM)
# WASM kompilieren
GOOS=js GOARCH=wasm go build -o cmd/client/web/main.wasm ./cmd/client
# Web-Server starten (z.B. mit Python)
cd cmd/client/web
python3 -m http.server 8000
# Browser öffnen: http://localhost:8000
Desktop-Client (Native)
go run ./cmd/client
🎮 Spielmodi
Solo-Modus
- Starte direkt aus dem Hauptmenü
- Automatischer Room-Erstellen
- Score basiert auf zurückgelegter Distanz
- Eigener Highscore im Leaderboard
Coop-Modus
-
Raum erstellen (Host):
- "RAUM ERSTELLEN" klicken
- Team-Namen festlegen (optional)
- Raum-Code mit Freunden teilen
-
Raum beitreten:
- Raum-Code eingeben
- "RAUM BEITRETEN" klicken
-
Gameplay:
- Host startet das Spiel wenn alle bereit sind
- Team-Score = Distanz × Anzahl lebender Spieler
- Beispiel: 100 Tiles mit 3 Spielern = 300 Punkte pro Spieler
Steuerung
Desktop:
Leertaste/W/↑: SpringenA/←: Links bewegenD/→: Rechts bewegenS/↓: Schneller fallen
Mobile:
- Touch-Buttons auf dem Bildschirm
Wall Climbing:
- Laufe gegen eine Wand
- Halte Richtungstaste gedrückt zum Hochklettern
- Lasse los zum Herunterrutschen
🔧 Entwicklung
Projekt-Struktur
EscapeFromTeacher/
├── cmd/
│ ├── server/ # Game Server
│ ├── client/ # Desktop & WASM Client
│ │ └── web/ # Web Assets & HTML
│ ├── builder/ # Asset Builder Tool
│ └── levelbuilder/ # Level Editor
├── pkg/
│ ├── game/ # Gemeinsame Game-Logik
│ ├── server/ # Server-spezifische Logik
│ └── config/ # Konfiguration
└── assets_raw/ # Rohe Asset-Dateien
Neue Features entwickeln
- Server-Logik in
pkg/server/ - Game-Logik (gemeinsam) in
pkg/game/ - Client-Rendering in
cmd/client/ - Web-UI in
cmd/client/web/
Build-Befehle
# Server
go build -o server ./cmd/server
# Desktop-Client
go build -o client ./cmd/client
# WASM-Client
GOOS=js GOARCH=wasm go build -o cmd/client/web/main.wasm ./cmd/client
# Level Builder
go build -o levelbuilder ./cmd/levelbuilder
🧰 Tools
Level Builder
Erstelle eigene Levels mit dem visuellen Editor:
go run ./cmd/levelbuilder
Features:
- Drag & Drop von Assets
- Bewegende Plattformen konfigurieren
- Chunk-basiertes Level-Design
- JSON-Export in
cmd/client/web/assets/chunks/
Asset Builder
Konvertiere Raw-Assets zu optimierten Spiel-Assets:
go run ./cmd/builder
Features:
- PNG-Kompression und -Skalierung
- Hitbox-Editor
- Asset-Metadaten (Typ, Offsets, etc.)
- Generiert
assets.json
📐 Architektur
Client-Server Kommunikation
Client Server
| |
|------ WebSocket ------->|
| (Input Events) |
| |
|<----- Broadcast --------|
| (Game State) |
| |
|-- Score Submission ---->|
| |
|<--- Proof Code ---------|
Game Loop
Server (60 FPS):
- Verarbeite Inputs von allen Clients
- Update Physik (Gravity, Kollision, etc.)
- Update Map (Chunk spawning/despawning)
- Broadcast Game State an alle Clients
Client:
- Sende lokale Inputs an Server
- Empfange Game State vom Server
- Render Game State
- (Optional) Client-Side Prediction für lokalen Spieler
Score-System
Solo:
- Score = Zurückgelegte Distanz (in Tiles)
- Coins: +200 Punkte
Coop:
- Distanz-Score akkumuliert pro Tick
- Pro Tick:
Score += Anzahl lebender Spieler - Beispiel: 3 Spieler → +3 Punkte/Tick (180 Punkte/Sekunde)
- Coins werden geteilt: Alle Spieler bekommen +200
📄 Lizenz
Dies ist ein Schulprojekt. Kommerzielle Nutzung und Veränderung des Quellcodes sind ausdrücklich untersagt. Alle Rechte liegen bei den Urhebern.
Projektleitung & Code: Sebastian Unterschütz Musik & Sound Design: Max E.
🙏 Credits
- Ebiten: Go 2D Game Engine
- NATS: Message Broker
- Redis: In-Memory Database
- Go WASM: WebAssembly Support
Entwickelt als Abschlussprojekt für IT232 (2025/2026)
Description
Languages
Go
70.9%
JavaScript
12.5%
HTML
12.3%
CSS
3.3%
Dockerfile
0.5%
Other
0.5%