Tourismusregion: Komplett-Integration (zweite neue Sim, beta)

Wellenbasierte Routen-Sim (DefensegeograSimMac) nach dem Tourismustal-
Playbook integriert: Sim nach App/sims/tourismusregion (game.html,
Sprites 47MB->9.5MB, ohne Eigen-Backend/Editor/Dashboard/Keys),
Plattform-Hooks (GGS_LIVE_STATE mit Welle/Budget/Umwelt/Sterne/Lenkung,
Submit bei Partie-Ende mit fertigem 0-100-Score, GGS_TUTORIAL, Home-
Button, Musik leise). Wrapper + Modul-Detailseite. SQL: module_info
(beta, Karte), Glossar-Kernbegriff Besucherlenkung (+Bild, Leichte
Sprache) + 12 Zuordnungen, Lehrplan-Mapping auf tourismus-
raumentwicklung (primaer) + verkehrserziehung/systemisches-denken.
LEHRPLAN.md mit Schwerpunkt Besucherlenkung & Mobilitaet. Lehrer-
Backend: Benchmark (Sim-Score direkt), Live-Cockpit-Spalten,
needsHelp, Highlights.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-12 01:14:12 +02:00
parent 778634fab6
commit 8047778a5b
86 changed files with 5237 additions and 0 deletions
+2
View File
@@ -623,6 +623,8 @@ if ($method === 'GET') {
return ($state['attemptsThisStep'] ?? 0) >= 6;
case 'tourismustal':
return ($state['money'] ?? 1) < 0 || ($state['lossStreak'] ?? 0) >= 8;
case 'tourismusregion':
return ($state['budget'] ?? 1) < -400 || ($state['env'] ?? 100) < 30;
}
return false;
};
+7
View File
@@ -74,6 +74,13 @@ $MODULE_HIGHLIGHTS = [
['key'=>'routes_completed','label'=>'Routen', 'agg'=>'max'],
['key'=>'avg_accuracy', 'label'=>'Genauigkeit','agg'=>'max','format'=>'percent'],
],
'tourismusregion' => [
['key'=>'results.score', 'label'=>'Score', 'agg'=>'max'],
['key'=>'results.avgStars', 'label'=>'Ø Sterne', 'agg'=>'max'],
['key'=>'results.revenue', 'label'=>'Wertschöpfung','agg'=>'max', 'unit'=>'€'],
['key'=>'results.env', 'label'=>'Umwelt', 'agg'=>'max'],
['key'=>'results.goalsDone','label'=>'Ziele', 'agg'=>'max'],
],
'tourismustal' => [
['key'=>'results.money', 'label'=>'Konto', 'agg'=>'max', 'unit'=>'€'],
['key'=>'results.maxGuests', 'label'=>'Gäste-Rekord','agg'=>'max'],
+17
View File
@@ -53,6 +53,7 @@ class Benchmark
'fluggesellschaft' => self::scoreFluggesellschaft($results),
'kofferdetektiv' => self::scoreKofferdetektiv($results),
'tourismustal' => self::scoreTourismustal($results),
'tourismusregion' => self::scoreTourismusregion($results),
// Entscheidungstag: kein assessment-Submit-Pfad bekannt → null
default => self::scoreFallbackStars($results),
};
@@ -459,6 +460,22 @@ class Benchmark
return (int)round(max(0, min(100, $score)));
}
/**
* Tourismusregion — die Sim berechnet selbst einen gewichteten 0100-Score
* (Bewertung 35 % + Wertschöpfung 25 % + Umwelt 20 % + Besucherlenkung 10 %
* + Finanzen 10 %, model.js finish()). Den übernehmen wir direkt.
*/
private static function scoreTourismusregion(array $r): ?int
{
$score = $r['score'] ?? null;
if (is_numeric($score)) return (int)round(max(0, min(100, $score)));
// Fallback: Zielerreichung
$done = $r['goalsDone'] ?? null;
$total = (int)($r['goalsTotal'] ?? 0);
if (!is_numeric($done) || $total <= 0) return null;
return (int)round(($done / $total) * 100);
}
/**
* Generischer Fallback: Sterne aus 5-er-Skala.
*/