Stand 2026-04-13: PHP/MySQL Infrastruktur, Flussmanagement, Stadt-Prototyp
- PHP/MySQL Backend (XAMPP + Produktionsserver) - Front-Controller, API-Endpunkte, Session-Management - Flussmanagement-Simulation (Echtzeit, Punkt-basierter Fluss) - Stadt & Raumplanung (Prototyp, Top-Down Kachelsystem) - Klimawaechter 3D: Deiche kleiner, Baeume kippen, Budget angepasst - persistence.ts: Dualer Speicher (localStorage + Server-API) - 6 Unit-Test-Dateien fuer bestehende Simulationen Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,594 @@
|
||||
Pflichtenheft
|
||||
Simulation „Flussmanagement“ für den Geografieunterricht
|
||||
1. Ziel des Projekts
|
||||
|
||||
Ziel ist die Entwicklung einer interaktiven Simulation für den Geografieunterricht (Sekundarstufe I, 10–15 Jahre), in der Schülerinnen und Schüler ein Flusssystem steuern und dabei Zielkonflikte zwischen:
|
||||
|
||||
Hochwasserschutz
|
||||
Landwirtschaft
|
||||
Ökologie
|
||||
Wirtschaft
|
||||
|
||||
erkennen und ausbalancieren.
|
||||
|
||||
Die Simulation soll sich wie ein Spiel anfühlen, aber fachlich korrekt und didaktisch wirksam sein.
|
||||
|
||||
2. Zielgruppe
|
||||
Schülerinnen und Schüler (10–15 Jahre)
|
||||
Lehrpersonen (Geografie, ggf. fächerübergreifend)
|
||||
Einsatz im Klassenverband (Einzel- oder Gruppenarbeit)
|
||||
3. Zentrale didaktische Ziele
|
||||
|
||||
Die Anwendung muss ermöglichen:
|
||||
|
||||
Verständnis von Mensch–Umwelt-Systemen
|
||||
Erkennen von Zielkonflikten (Trade-offs)
|
||||
Einsicht in nichtlineare Zusammenhänge
|
||||
Bewertung von Eingriffen in Naturräume
|
||||
Reflexion historischer Entwicklungen (optional)
|
||||
4. Spielprinzip
|
||||
|
||||
Der Spieler übernimmt die Rolle eines Entscheidungsträgers (z. B. Region/Behörde) und steuert Maßnahmen an einem Fluss.
|
||||
|
||||
Grundmechanik
|
||||
Spieler wählt Steuermaßnahmen
|
||||
Simulation berechnet Auswirkungen
|
||||
Spieler sieht visuelle Veränderungen
|
||||
Spiel bewertet Ergebnis anhand mehrerer Ziele
|
||||
5. Spieldauer
|
||||
|
||||
Das Spiel muss konfigurierbar sein:
|
||||
|
||||
Leveltyp Dauer
|
||||
Kurzlevel 10–15 Minuten
|
||||
Standardlevel 20–30 Minuten
|
||||
Langlevel 30–40 Minuten
|
||||
Steuerung der Dauer über:
|
||||
Anzahl der Runden
|
||||
Anzahl aktiver Parameter
|
||||
Ereignisdichte
|
||||
Komplexität der Entscheidungen
|
||||
6. Spielstruktur
|
||||
6.1 Rundenbasiertes System
|
||||
|
||||
Ein Level besteht aus mehreren Runden:
|
||||
|
||||
Situation anzeigen
|
||||
Spieler trifft Entscheidungen
|
||||
Simulation wird berechnet
|
||||
Ergebnisse werden visualisiert
|
||||
ggf. Ereignis tritt ein
|
||||
6.2 Levelstruktur
|
||||
|
||||
Levels unterscheiden sich durch:
|
||||
|
||||
Rahmenbedingungen
|
||||
freigeschaltete Maßnahmen
|
||||
Zielgewichtung
|
||||
Schwierigkeit
|
||||
7. Steuergrößen (Spieleraktionen)
|
||||
|
||||
Mindestens folgende Maßnahmen müssen implementiert werden:
|
||||
|
||||
Flussbegradigung
|
||||
Dämme bauen
|
||||
Ausbaggern
|
||||
Auen freigeben
|
||||
Renaturierung
|
||||
Bewässerung
|
||||
|
||||
Jede Maßnahme:
|
||||
|
||||
hat Intensität (0–100)
|
||||
hat Kosten
|
||||
hat positive und negative Effekte
|
||||
8. Zustandsparameter (Simulation)
|
||||
|
||||
Alle Werte liegen im Bereich 0–100:
|
||||
|
||||
Risiken
|
||||
Lokales Hochwasser
|
||||
Hochwasser flussabwärts
|
||||
Erosion
|
||||
Nutzen
|
||||
Bodenfruchtbarkeit
|
||||
Biodiversität
|
||||
Grundwasser
|
||||
Nutzbare Fläche
|
||||
Wirtschaft
|
||||
9. Rahmenbedingungen
|
||||
|
||||
Pro Level definierbar:
|
||||
|
||||
Niederschlag
|
||||
Extremwetter
|
||||
Gefälle
|
||||
Bevölkerungsdruck
|
||||
Budget
|
||||
|
||||
Diese sind nicht direkt steuerbar, beeinflussen aber die Simulation.
|
||||
|
||||
10. Simulationslogik
|
||||
10.1 Grundprinzip
|
||||
|
||||
Die Simulation basiert auf:
|
||||
|
||||
direkten Effekten von Maßnahmen
|
||||
indirekten Wechselwirkungen zwischen Parametern
|
||||
nichtlinearen Funktionen
|
||||
10.2 Anforderungen an die Logik
|
||||
|
||||
Die Simulation muss:
|
||||
|
||||
nichtlinear sein (keine einfachen +/– Beziehungen)
|
||||
abnehmenden Nutzen bei steigender Intensität abbilden
|
||||
überproportionale Nebenwirkungen bei starken Eingriffen erzeugen
|
||||
Kettenreaktionen ermöglichen
|
||||
10.3 Beispielhafte Effekte
|
||||
Begradigung → mehr Fläche, aber mehr Hochwasser flussabwärts
|
||||
Dämme → lokaler Schutz, aber Nachteile für Landwirtschaft
|
||||
Renaturierung → ökologische Vorteile, aber weniger Fläche
|
||||
11. Bewertungssystem
|
||||
11.1 Zielbereiche
|
||||
|
||||
Das Spiel bewertet:
|
||||
|
||||
Sicherheit
|
||||
Ökologie
|
||||
Landwirtschaft
|
||||
Wirtschaft
|
||||
11.2 Mehrzielbewertung
|
||||
|
||||
Es gibt keine perfekte Lösung.
|
||||
|
||||
Gesamtscore basiert auf gewichteter Kombination:
|
||||
|
||||
Score = f(Sicherheit, Ökologie, Landwirtschaft, Wirtschaft)
|
||||
|
||||
Gewichtung ist je Level anpassbar.
|
||||
|
||||
12. Balancing-Anforderungen
|
||||
|
||||
Das System muss sicherstellen:
|
||||
|
||||
12.1 Keine dominante Strategie
|
||||
Keine Maßnahme darf immer optimal sein
|
||||
12.2 Zielkonflikte
|
||||
Jede Maßnahme muss mindestens einen Nachteil haben
|
||||
12.3 Kontextabhängigkeit
|
||||
Wirkung hängt von Rahmenbedingungen ab
|
||||
12.4 Extremwerte vermeiden
|
||||
Maximale Eingriffe müssen Risiken erzeugen
|
||||
13. Spielmechaniken gegen Fehlverhalten
|
||||
Muss implementiert werden:
|
||||
Budgetbegrenzung
|
||||
Strafsystem für extreme Eingriffe
|
||||
Katastrophen bei kritischen Zuständen
|
||||
Bonus für ausgewogene Strategien
|
||||
14. Visualisierung
|
||||
|
||||
Die Simulation muss visuell darstellen:
|
||||
|
||||
Hochwasser (Überflutung)
|
||||
Flussverlauf (gerade vs. mäandrierend)
|
||||
Vegetation / Biodiversität
|
||||
Landwirtschaft (Ertrag sichtbar)
|
||||
Bebauung
|
||||
Wichtig:
|
||||
|
||||
Jede Änderung im Modell muss sichtbar sein.
|
||||
|
||||
15. Benutzeroberfläche
|
||||
Anforderungen
|
||||
einfache Bedienung (Schüler geeignet)
|
||||
klare Rückmeldung
|
||||
visuelle Feedbacks statt Zahlenlast
|
||||
Parameter optional einblendbar
|
||||
16. Admin-/Lehrermodus
|
||||
|
||||
Muss enthalten:
|
||||
|
||||
Auswahl von Levels
|
||||
Anpassung von:
|
||||
Budget
|
||||
Klima
|
||||
Zielgewichtung
|
||||
Aktivieren/Deaktivieren von Maßnahmen
|
||||
Festlegen der Spieldauer
|
||||
17. Technische Anforderungen
|
||||
Frontend
|
||||
Web-basiert (HTML, JS, optional TypeScript)
|
||||
responsiv
|
||||
keine Installation nötig
|
||||
Backend (optional)
|
||||
für Speicherung von Szenarien
|
||||
keine Pflicht für Minimalversion
|
||||
18. Erweiterbarkeit
|
||||
|
||||
Das System muss modular aufgebaut sein, damit später ergänzt werden kann:
|
||||
|
||||
historische Level
|
||||
weitere Naturprozesse
|
||||
andere geografische Themen
|
||||
19. Test- und Balancing-System
|
||||
|
||||
Das System muss ein internes oder separates Modul enthalten, das:
|
||||
|
||||
viele Strategien automatisch testet
|
||||
dominante Strategien erkennt
|
||||
Extremverhalten identifiziert
|
||||
Balanceprobleme meldet
|
||||
20. Abnahmekriterien
|
||||
|
||||
Das System gilt als erfolgreich, wenn:
|
||||
|
||||
ein Level in 10–40 Minuten spielbar ist
|
||||
mehrere unterschiedliche Strategien zum Erfolg führen
|
||||
keine einzelne Maßnahme dominiert
|
||||
Auswirkungen visuell nachvollziehbar sind
|
||||
Schüler Zielkonflikte erkennen können
|
||||
21. Anhänge
|
||||
Anhang A: Datenmodell (JSON)
|
||||
Anhang B: Beispiel-Simulationslogik
|
||||
Anhang C: Balancing-Tester
|
||||
|
||||
(Diese basieren auf den zuvor entwickelten Modellen und werden als Referenz bereitgestellt.)
|
||||
|
||||
Fazit
|
||||
|
||||
Dieses Pflichtenheft beschreibt kein einfaches Spiel, sondern ein:
|
||||
|
||||
dynamisches, nichtlineares, mehrzieliges Simulationssystem für didaktisches Lernen
|
||||
|
||||
Wenn du willst, gehe ich im nächsten Schritt noch weiter und erstelle dir:
|
||||
|
||||
konkrete Level (z. B. Nildelta, Industrialisierung, Alpenfluss)
|
||||
oder eine fertige Prompt-Version für eine Programmier-KI (z. B. Cursor, GPT, etc.)
|
||||
|
||||
Das wäre der nächste logische Schritt.
|
||||
|
||||
Ja mach das mit dem konkreten Level noch als Ergänzung
|
||||
|
||||
Gut — ich ergänze das Pflichtenheft jetzt um konkrete, sofort implementierbare Level-Spezifikationen.
|
||||
Diese sind so formuliert, dass eine KI sie direkt in Datenstrukturen oder Code übersetzen kann.
|
||||
|
||||
Ergänzung zum Pflichtenheft: Konkrete Leveldefinitionen
|
||||
22. Levelsystem – Struktur
|
||||
|
||||
Jedes Level wird formal definiert durch:
|
||||
|
||||
type LevelDefinition = {
|
||||
id: string;
|
||||
title: string;
|
||||
description: string;
|
||||
|
||||
durationTargetMinutes: number;
|
||||
|
||||
initialState: State;
|
||||
conditions: Conditions;
|
||||
|
||||
allowedControls: (keyof Controls)[];
|
||||
controlLimits: Partial<Controls>;
|
||||
|
||||
scoreWeights: {
|
||||
safety: number;
|
||||
ecology: number;
|
||||
agriculture: number;
|
||||
economy: number;
|
||||
};
|
||||
|
||||
rounds: number;
|
||||
|
||||
events?: LevelEvent[];
|
||||
|
||||
winConditions: {
|
||||
minScore?: number;
|
||||
targetScores?: Partial<ScoreBreakdown>;
|
||||
};
|
||||
|
||||
loseConditions?: {
|
||||
maxFloodLocal?: number;
|
||||
maxFloodDownstream?: number;
|
||||
minGroundwater?: number;
|
||||
};
|
||||
};
|
||||
23. Level 1 – Einstieg: „Fluss und Siedlung“
|
||||
Ziel
|
||||
|
||||
Grundverständnis von Hochwasser und einfachen Maßnahmen
|
||||
|
||||
const level1: LevelDefinition = {
|
||||
id: "L1",
|
||||
title: "Fluss und Siedlung",
|
||||
description: "Eine kleine Siedlung liegt an einem Fluss und ist regelmäßig von Hochwasser betroffen.",
|
||||
|
||||
durationTargetMinutes: 10,
|
||||
|
||||
rounds: 5,
|
||||
|
||||
initialState: {
|
||||
floodLocal: 60,
|
||||
floodDownstream: 40,
|
||||
erosion: 30,
|
||||
soilFertility: 60,
|
||||
biodiversity: 70,
|
||||
groundwater: 55,
|
||||
usableLand: 40,
|
||||
economy: 40
|
||||
},
|
||||
|
||||
conditions: {
|
||||
rainfall: 60,
|
||||
extremeWeather: 30,
|
||||
slope: 40,
|
||||
populationPressure: 30,
|
||||
budget: 120
|
||||
},
|
||||
|
||||
allowedControls: ["levees", "floodplainRelease"],
|
||||
controlLimits: {
|
||||
levees: 60,
|
||||
floodplainRelease: 60
|
||||
},
|
||||
|
||||
scoreWeights: {
|
||||
safety: 0.5,
|
||||
ecology: 0.2,
|
||||
agriculture: 0.15,
|
||||
economy: 0.15
|
||||
},
|
||||
|
||||
winConditions: {
|
||||
minScore: 60
|
||||
},
|
||||
|
||||
loseConditions: {
|
||||
maxFloodLocal: 85
|
||||
}
|
||||
};
|
||||
24. Level 2 – Landwirtschaft: „Fruchtbares Tal“
|
||||
Fokus
|
||||
|
||||
Nutzen von Überschwemmungen vs. Risiko
|
||||
|
||||
const level2: LevelDefinition = {
|
||||
id: "L2",
|
||||
title: "Fruchtbares Tal",
|
||||
description: "Ein Tal lebt von fruchtbaren Böden durch regelmäßige Überschwemmungen.",
|
||||
|
||||
durationTargetMinutes: 20,
|
||||
|
||||
rounds: 7,
|
||||
|
||||
initialState: {
|
||||
floodLocal: 55,
|
||||
floodDownstream: 35,
|
||||
erosion: 35,
|
||||
soilFertility: 75,
|
||||
biodiversity: 65,
|
||||
groundwater: 60,
|
||||
usableLand: 45,
|
||||
economy: 50
|
||||
},
|
||||
|
||||
conditions: {
|
||||
rainfall: 65,
|
||||
extremeWeather: 40,
|
||||
slope: 35,
|
||||
populationPressure: 40,
|
||||
budget: 150
|
||||
},
|
||||
|
||||
allowedControls: ["levees", "floodplainRelease", "irrigation"],
|
||||
|
||||
scoreWeights: {
|
||||
safety: 0.25,
|
||||
ecology: 0.2,
|
||||
agriculture: 0.4,
|
||||
economy: 0.15
|
||||
},
|
||||
|
||||
winConditions: {
|
||||
targetScores: {
|
||||
agriculture: 65,
|
||||
safety: 50
|
||||
}
|
||||
}
|
||||
};
|
||||
25. Level 3 – Industrialisierung: „Der gezähmte Fluss“
|
||||
Fokus
|
||||
|
||||
Technische Eingriffe und ihre Folgen
|
||||
|
||||
const level3: LevelDefinition = {
|
||||
id: "L3",
|
||||
title: "Der gezähmte Fluss",
|
||||
description: "Der Fluss soll kontrolliert werden, um Städte und Industrie zu schützen.",
|
||||
|
||||
durationTargetMinutes: 25,
|
||||
|
||||
rounds: 8,
|
||||
|
||||
initialState: {
|
||||
floodLocal: 50,
|
||||
floodDownstream: 45,
|
||||
erosion: 40,
|
||||
soilFertility: 55,
|
||||
biodiversity: 50,
|
||||
groundwater: 50,
|
||||
usableLand: 55,
|
||||
economy: 60
|
||||
},
|
||||
|
||||
conditions: {
|
||||
rainfall: 60,
|
||||
extremeWeather: 45,
|
||||
slope: 50,
|
||||
populationPressure: 70,
|
||||
budget: 180
|
||||
},
|
||||
|
||||
allowedControls: [
|
||||
"levees",
|
||||
"straightening",
|
||||
"dredging"
|
||||
],
|
||||
|
||||
scoreWeights: {
|
||||
safety: 0.4,
|
||||
ecology: 0.1,
|
||||
agriculture: 0.2,
|
||||
economy: 0.3
|
||||
},
|
||||
|
||||
events: [
|
||||
{
|
||||
round: 4,
|
||||
type: "flood_event",
|
||||
intensity: 70
|
||||
}
|
||||
],
|
||||
|
||||
winConditions: {
|
||||
minScore: 65
|
||||
}
|
||||
};
|
||||
26. Level 4 – Systemdenken: „Fluss im Gleichgewicht“
|
||||
Fokus
|
||||
|
||||
Mehrere Ziele gleichzeitig
|
||||
|
||||
const level4: LevelDefinition = {
|
||||
id: "L4",
|
||||
title: "Fluss im Gleichgewicht",
|
||||
description: "Finde eine Balance zwischen Sicherheit, Natur und Nutzung.",
|
||||
|
||||
durationTargetMinutes: 30,
|
||||
|
||||
rounds: 10,
|
||||
|
||||
initialState: {
|
||||
floodLocal: 55,
|
||||
floodDownstream: 50,
|
||||
erosion: 45,
|
||||
soilFertility: 60,
|
||||
biodiversity: 60,
|
||||
groundwater: 50,
|
||||
usableLand: 50,
|
||||
economy: 55
|
||||
},
|
||||
|
||||
conditions: {
|
||||
rainfall: 60,
|
||||
extremeWeather: 50,
|
||||
slope: 45,
|
||||
populationPressure: 60,
|
||||
budget: 180
|
||||
},
|
||||
|
||||
allowedControls: [
|
||||
"levees",
|
||||
"straightening",
|
||||
"floodplainRelease",
|
||||
"renaturation",
|
||||
"irrigation"
|
||||
],
|
||||
|
||||
scoreWeights: {
|
||||
safety: 0.25,
|
||||
ecology: 0.25,
|
||||
agriculture: 0.25,
|
||||
economy: 0.25
|
||||
},
|
||||
|
||||
winConditions: {
|
||||
minScore: 70
|
||||
}
|
||||
};
|
||||
27. Level 5 – Speziallevel: Nildelta
|
||||
|
||||
Bezug zur realen Welt und deinem Wunsch nach nicht einseitigem Denken
|
||||
|
||||
Fokus
|
||||
|
||||
Überschwemmung als Vorteil
|
||||
|
||||
const level5: LevelDefinition = {
|
||||
id: "L5",
|
||||
title: "Nildelta",
|
||||
description: "Die Überschwemmungen bringen fruchtbare Böden – aber auch Risiken.",
|
||||
|
||||
durationTargetMinutes: 35,
|
||||
|
||||
rounds: 10,
|
||||
|
||||
initialState: {
|
||||
floodLocal: 65,
|
||||
floodDownstream: 40,
|
||||
erosion: 30,
|
||||
soilFertility: 85,
|
||||
biodiversity: 70,
|
||||
groundwater: 65,
|
||||
usableLand: 50,
|
||||
economy: 60
|
||||
},
|
||||
|
||||
conditions: {
|
||||
rainfall: 40,
|
||||
extremeWeather: 20,
|
||||
slope: 20,
|
||||
populationPressure: 70,
|
||||
budget: 160
|
||||
},
|
||||
|
||||
allowedControls: [
|
||||
"levees",
|
||||
"irrigation",
|
||||
"floodplainRelease"
|
||||
],
|
||||
|
||||
scoreWeights: {
|
||||
safety: 0.2,
|
||||
ecology: 0.2,
|
||||
agriculture: 0.45,
|
||||
economy: 0.15
|
||||
},
|
||||
|
||||
winConditions: {
|
||||
targetScores: {
|
||||
agriculture: 75
|
||||
}
|
||||
},
|
||||
|
||||
loseConditions: {
|
||||
minGroundwater: 25
|
||||
}
|
||||
};
|
||||
28. Ereignissystem (für alle Levels)
|
||||
type LevelEvent = {
|
||||
round: number;
|
||||
type: "flood_event" | "drought" | "economic_boost";
|
||||
intensity: number;
|
||||
};
|
||||
|
||||
Beispiele:
|
||||
|
||||
Hochwasser
|
||||
Dürre
|
||||
wirtschaftlicher Boom
|
||||
29. Didaktische Progression
|
||||
Level Konzept
|
||||
1 Ursache-Wirkung
|
||||
2 Nutzen vs Risiko
|
||||
3 Technik vs Natur
|
||||
4 Systemdenken
|
||||
5 Realwelt + Transfer
|
||||
30. Abschluss
|
||||
|
||||
Mit dieser Ergänzung hat deine KI jetzt:
|
||||
|
||||
ein vollständiges Spielsystem
|
||||
ein Simulationsmodell
|
||||
ein Balancing-Konzept
|
||||
konkrete Leveldaten
|
||||
klare didaktische Struktur
|
||||
Reference in New Issue
Block a user