Labyrinth-Generator: Serverseitige Algorithmen, Canvas-Rendering und PDF-Export

Artikel 22 des Blueflexx-WebDesign-Blog (zur Übersicht)


Tech-Writer Thomas

Tech-Writer am 27.03.2026



Gesamt: 12
Dieses Jahr: 12
Diesen Monat: 8
Diese Woche: 1
Heute: 1


Im Rahmen eines Kundenprojekts entstand die Idee, einen flexiblen Labyrinth-Generator zu entwickeln, der sowohl interaktiv im Browser spielbar ist als auch als Druckvorlage (PDF) exportiert werden kann. Im Folgenden skizziere ich die technische Umsetzung – von der PHP-Generierung über die JavaScript Canvas-API bis hin zum FPDF-Export.


Copyright und Lizenz: Von "Blueflexx.com" mit KI-Hilfe erstellte Grafik zum Artikel über die Labyrinth-Generator-Technik

Architektur im Überblick

  • Frontend: HTML5, CSS3 (Bootstrap 3), JavaScript (ES6) mit Canvas-API für die Darstellung und Spielsteuerung.
  • Backend: PHP (generate_maze.php) für die Labyrinth-Generierung und Speicherung der Highscores via JSON.
  • PDF-Export: FPDF-Bibliothek mit eigener Erweiterung für gestrichelte Linien.

Serverseitige Labyrinth-Generierung (PHP)

Der Kernalgorithmus basiert auf einem modifizierten rekursiven Backtracking-Ansatz (Infos bei Wikipedia). Besonders spannend ist die Umsetzung von Brücken (Weave-Labyrinthe). Hier werden zusätzliche Flags im Grid-Array gesetzt, um Über- und Unterführungen zu markieren:

function addBridgesAndTunnels($grid, $size) {
    for ($y = 1; $y < $size - 1; $y++) {
        for ($x = 1; $x < $size - 1; $x++) {
            if (mt_rand(1, 100) <= 8) { // 8% Chance für Brücken
                $grid[$y][$x]['isBridge'] = true;
                $grid[$y][$x]['bridgeDirection'] = mt_rand(0, 1) ? 'horizontal' : 'vertical';
                
                if ($grid[$y][$x]['bridgeDirection'] === 'horizontal') {
                    $grid[$y][$x]['isBridgeWest'] = true;
                    $grid[$y][$x]['isBridgeEast'] = true;
                } else {
                    $grid[$y][$x]['isBridgeNorth'] = true;
                    $grid[$y][$x]['isBridgeSouth'] = true;
                }
            }
        }
    }
    return $grid;
}

Der kürzeste Lösungsweg wird über eine Breitensuche (BFS / Breadth-First Search) berechnet, welche die Brücken-Flags dynamisch als gültige Kanten evaluiert.

Canvas-Rendering und Bewegung im Frontend

Das Frontend empfängt das Labyrinth-Grid als JSON. Die Bewegung des Spielers (Zustands-Vektor) wird über die canMove-Methode validiert:

canMove(fromX, fromY, toX, toY) {
    const cell = this.grid[fromY][fromX];
    const dx = toX - fromX;
    if (dx === 1) { // Bewegung nach Osten
        if (cell.eastIsBridge === true) return true;
        return !cell.east;
    }
    if (dx === -1) { // Bewegung nach Westen
       if (cell.westIsBridge === true) return true;
       return !cell.west;
   }
    // ... analog für Nord (dy = -1) und Süd (dy = 1)
}

PDF-Export mit FPDF und gestrichelten Linien

Standard-FPDF unterstützt out-of-the-box keine gestrichelten Linien. Durch das Erweitern der Klasse um die PDF-native Syntax SetDash werden Brücken-Wände visuell separiert:

if ($cell['bridgeDirection'] === 'horizontal') {
    if (isset($cell['isBridgeWest']) && $cell['isBridgeWest'] && $cell['west']) {
        $pdf->Line($xPos, $yPos, $xPos, $yPos + $cellSize);
    }
    if (isset($cell['isBridgeEast']) && $cell['isBridgeEast'] && $cell['east']) {
        $pdf->Line($xPos + $cellSize, $yPos, $xPos + $cellSize, $yPos + $cellSize);
    }
}
Performance-Tipp: Die Strichlänge wird im Skript dynamisch an die $cellSize gekoppelt. So skalieren die gestrichelten Linien auch bei extrem dichten Grids (z.B. 35×35) sauber mit!

Highscores und Datenspeicherung

Die Bestenliste wird dateibasiert als JSON in einem Unterverzeichnis abgelegt. Ein separates Skript (save_score.php) übernimmt Server-seitige Validierungen (Anti-Cheat, Zeitauswertung), bevor das Datei-Locking (flock) die Schreiboperation triggert.

Fazit & Ausblick

Die strikte Trennung von Generierungslogik (PHP) und grafischer Repräsentation (JS Canvas / FPDF) sorgt für hochgradig modularen Code. Geplante Upgrades umfassen 3D-Labyrinthe und polare Gitter (Circular Mazes). Das fertige Tool ist auf der privaten Bananapage-Homepage produktiv im Einsatz.

Skalierbare Web-Architekturen für Ihr Projekt?

Sie planen eine interaktive Web-Applikation, benötigen performantes Canvas-Rendering oder automatisierte PDF-Reports? Als Full-Stack Experten bringen wir Ihre Software-Architektur zum Laufen.

Projekt anfragen

Werbung