# Match3 - Juwelen Kampagne

## Übersicht

Das Match3-Spiel wurde von einem einfachen Spielmodi-System zu einem vollständigen Kampagnen-System umgebaut. Spieler starten direkt in die Kampagne und müssen Level für Level verschiedene Ziele erreichen.

## Neue Features

### 🎯 **Kampagnen-System**
- **Direkter Start**: Keine Spielmodi-Auswahl mehr, Spieler starten sofort in die Kampagne
- **Level-basierter Fortschritt**: Jedes Level hat spezifische Ziele und Anforderungen
- **Stern-System**: Spieler können 1-3 Sterne pro Level verdienen
- **Fortschrittsspeicherung**: Alle Daten werden im Backend gespeichert

### 🏆 **Level-Objectives**
- **Punkte-Ziele**: Sammle eine bestimmte Anzahl von Punkten
- **Match-Ziele**: Mache eine bestimmte Anzahl von Matches
- **Effizienz-Ziele**: Verwende weniger Züge als vorgegeben
- **Zeit-Ziele**: (Zukünftig) Schließe das Level in einer bestimmten Zeit ab

### 📊 **Fortschrittsverfolgung**
- **Persistente Daten**: Spielstand wird in der Datenbank gespeichert
- **Benutzerstatistiken**: Detaillierte Übersicht über alle Kampagnen
- **Bestenlisten**: Vergleich mit anderen Spielern
- **Versuchszähler**: Verfolgung der Versuche pro Level

## Technische Architektur

### 🗄️ **Backend-Schema**

#### Neue Tabellen im `match3` Schema:

1. **`match3_campaigns`**
   - Kampagnen-Informationen (Name, Beschreibung, Reihenfolge)
   - Aktiv/Inaktiv-Status

2. **`match3_levels`**
   - Level-spezifische Einstellungen (Brettgröße, Juwelen-Typen)
   - Verknüpfung zu Kampagnen
   - Züge- und Zeitlimits

3. **`match3_objectives`**
   - Level-Ziele mit Typ, Beschreibung und Zielwert
   - Verschiedene Operatoren (>=, <=, =, >, <)

4. **`match3_user_progress`**
   - Kampagnen-Fortschritt pro Benutzer
   - Gesamtpunktzahl, Sterne und abgeschlossene Level

5. **`match3_user_level_progress`**
   - Detaillierter Level-Fortschritt
   - Bestwerte und Versuchszähler

### 🔧 **Backend-Services**

#### `Match3Service`
- **`getActiveCampaigns()`**: Lädt alle aktiven Kampagnen
- **`getCampaign(campaignId)`**: Lädt eine spezifische Kampagne
- **`getUserProgress(userId, campaignId)`**: Lädt Benutzerfortschritt
- **`updateLevelProgress()`**: Aktualisiert Level-Fortschritt
- **`getLeaderboard()`**: Lädt Bestenliste
- **`getUserStats()`**: Lädt Benutzerstatistiken

#### `Match3Controller`
- RESTful API-Endpunkte für alle Match3-Operationen
- Authentifizierung erforderlich für alle Routen
- Fehlerbehandlung und Validierung

### 🌐 **API-Endpunkte**

```
GET    /api/match3/campaigns              - Alle aktiven Kampagnen
GET    /api/match3/campaigns/:id          - Spezifische Kampagne
GET    /api/match3/campaigns/:id/progress - Benutzerfortschritt
POST   /api/match3/campaigns/:id/levels/:levelId/progress - Fortschritt speichern
GET    /api/match3/campaigns/:id/leaderboard - Bestenliste
GET    /api/match3/stats                  - Benutzerstatistiken
```

### 🎮 **Frontend-Änderungen**

#### `Match3Game.vue`
- **Entfernt**: Spielmodi-Auswahl, Highscore-System
- **Hinzugefügt**: Kampagnen-Status, Level-Info, Objective-Anzeige
- **Neue Dialoge**: Level-Abschluss, Kampagnen-Abschluss
- **API-Integration**: Laden und Speichern von Kampagnen-Daten

#### Lokalisierung
- Neue Übersetzungsschlüssel für Kampagnen-System
- Deutsche und englische Lokalisierung
- Konsistente Benennung

## Installation & Setup

### 1. **Backend starten**
```bash
cd backend
npm start
```

Das Backend erstellt automatisch:
- Das `match3` Schema
- Alle erforderlichen Tabellen
- Beispieldaten (Kampagne + 2 Level)

### 2. **Frontend starten**
```bash
cd frontend
npm run dev
```

## Automatische Initialisierung

Das System initialisiert sich automatisch beim ersten Start:

- **Schema-Erstellung**: `utils/sequelize.js` erstellt das `match3` Schema
- **Tabellen-Synchronisation**: Sequelize erstellt alle Tabellen mit `sync({ alter: true })`
- **Beispieldaten**: `utils/initializeMatch3.js` erstellt die erste Kampagne
- **Assoziationen**: `models/associations.js` verknüpft alle Modelle

## Beispieldaten

Die automatische Initialisierung erstellt:
- **1 Kampagne**: "Juwelen-Meister"
- **2 Level**: "Der Anfang" und "Erste Herausforderung"
- **5 Objectives**: Verschiedene Ziele für beide Level

## Erweiterte Funktionen

### 🔮 **Zukünftige Entwicklungen**
- **Mehr Kampagnen**: Verschiedene Themen und Schwierigkeitsgrade
- **Spezial-Juwelen**: Power-ups und Bonus-Effekte
- **Multiplayer**: Wettbewerbe zwischen Spielern
- **Achievements**: Belohnungssystem für besondere Leistungen
- **Tägliche Herausforderungen**: Neue Ziele jeden Tag

### 🎨 **Anpassungsmöglichkeiten**
- **Neue Objective-Typen**: Einfach über das Datenbankschema erweiterbar
- **Kampagnen-Editor**: Admin-Interface zum Erstellen neuer Kampagnen
- **Benutzerdefinierte Level**: Spieler können eigene Level erstellen
- **Themen-Skins**: Verschiedene visuelle Stile

## Wartung & Monitoring

### 📈 **Metriken**
- Spieler-Engagement pro Kampagne
- Level-Abschlussraten
- Durchschnittliche Spielzeit
- Beliebte Kampagnen

### 🛠️ **Admin-Funktionen**
- Kampagnen aktivieren/deaktivieren
- Level-Parameter anpassen
- Objective-Ziele optimieren
- Benutzerfortschritt zurücksetzen

## Technische Details

### **Modul-Struktur**
- **ES6-Module**: Alle neuen Dateien verwenden `import/export`
- **Konsistente Struktur**: Folgt dem bestehenden Projekt-Pattern
- **Zentrale Assoziationen**: Alle Beziehungen in `models/associations.js`
- **Automatische Schema-Erstellung**: Keine manuellen Migrationen nötig

### **Datenbank-Design**
- **Flexible Objective-Systeme**: Verschiedene Zieltypen und Operatoren
- **Performance-Optimiert**: Indizes auf häufig abgefragten Feldern
- **Referentielle Integrität**: Foreign Key Constraints für Datenkonsistenz
- **Skalierbar**: Einfach um neue Kampagnen und Level erweiterbar

## Fazit

Das neue Kampagnen-System verwandelt das einfache Match3-Spiel in ein vollwertiges, progressives Spielerlebnis. Durch die Backend-Integration werden alle Spielstände persistent gespeichert und ermöglichen eine langfristige Spielerbindung.

Die modulare Architektur macht es einfach, neue Kampagnen, Level und Objective-Typen hinzuzufügen, ohne den bestehenden Code zu beeinträchtigen. Das System initialisiert sich automatisch und erfordert keine manuellen Datenbankoperationen.
