Private
Public Access
1
0
Sebi c5aab8b4b8
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 1m29s
Merge pull request 'test_solo' (#1) from test_solo into main
Reviewed-on: #1
2026-04-22 22:07:50 +00:00
2026-04-22 11:38:35 +02:00
2026-01-12 21:31:36 +01:00

🏃 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!

License Go Version Platform

📋 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 + WASM + Ebiten: 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

  1. Raum erstellen (Host):

    • "RAUM ERSTELLEN" klicken
    • Team-Namen festlegen (optional)
    • Raum-Code mit Freunden teilen
  2. Raum beitreten:

    • Raum-Code eingeben
    • "RAUM BEITRETEN" klicken
  3. 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 / : Springen
  • A / : Links bewegen
  • D / : Rechts bewegen
  • S / : 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

  1. Server-Logik in pkg/server/
  2. Game-Logik (gemeinsam) in pkg/game/
  3. Client-Rendering in cmd/client/
  4. 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):

  1. Verarbeite Inputs von allen Clients
  2. Update Physik (Gravity, Kollision, etc.)
  3. Update Map (Chunk spawning/despawning)
  4. Broadcast Game State an alle Clients

Client:

  1. Sende lokale Inputs an Server
  2. Empfange Game State vom Server
  3. Render Game State
  4. (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 Eisel

🙏 Credits

  • Ebiten: Go 2D Game Engine
  • NATS: Message Broker
  • Redis: In-Memory Database
  • Go WASM: WebAssembly Support

Entwickelt als Abschieds-Projekt für IT232 (2025/2026)

Description
No description provided
Readme 243 MiB
Languages
Go 70.9%
JavaScript 12.5%
HTML 12.3%
CSS 3.3%
Dockerfile 0.5%
Other 0.5%