Private
Public Access
1
0
Files
EscapeFromTeacher/README.md
Sebastian Unterschütz 6dc3f8d141
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 7m46s
fix IMPRESSUM and README.md
2026-01-12 21:31:36 +01:00

296 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🏃 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](https://img.shields.io/badge/license-Proprietary-red)
![Go Version](https://img.shields.io/badge/go-1.25+-blue.svg)
![Platform](https://img.shields.io/badge/platform-Web-green)
## 📋 Inhaltsverzeichnis
- [Features](#-features)
- [Technologie-Stack](#-technologie-stack)
- [Installation](#-installation)
- [Spielmodi](#-spielmodi)
- [Entwicklung](#-entwicklung)
- [Architektur](#-architektur)
- [Tools](#-tools)
- [Lizenz](#-lizenz)
## ✨ 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
```bash
# Go 1.25 oder höher
go version
# Redis für Leaderboard
redis-server --version
```
### Repository klonen
```bash
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:
```bash
# 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
```bash
# 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)
```bash
# 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)
```bash
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
```bash
# 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:
```bash
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:
```bash
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)**