Ich versuche ein zufälliges Labyrinth via PHP generieren zu lassen. In meinem Script scheint es erst einmal zu funktionieren, leider habe ich auch einen Logikfehler implementiert, den ich so nicht verstehe, sprich: Das Script läuft (noch) nicht so wie es laufen soll und ich komme nicht dahinter...
Weiss evtl. jemand von euch wo der Fehler steckt?
Code:
<?php
session_start();
if (!isset ($_SESSION["user_id"]))
{
header ("Location: index.php");
}
$user_id = $_SESSION['user_id'];
$user_level = $_SESSION['user_level'];
?>
<style type="text/css">
<!--
.mapbox {
padding: 0px;
margin: -1px;
}
.maptile_empty {
width: 32px;
height: 32px;
border: 1px dotted #111;
color: #444;
display: block;
float: left;
text-align: center;
font-size: 8pt;
}
.maptile_start {
width: 32px;
height: 32px;
border: 1px solid #333;
background-color: #404000;
display: block;
float: left;
text-align: center;
font-weight: bold;
}
.maptile_dungeon {
width: 32px;
height: 32px;
border: 1px solid #333;
background-color: #555;
display: block;
float: left;
text-align: center;
font-weight: bold;
}
.maptile_end {
width: 32px;
height: 32px;
border: 1px solid #333;
background-color: #400000;
display: block;
float: left;
text-align: center;
font-weight: bold;
}
-->
</style>
<div class="mapbox">
<?php
$tile = array();
$tilex = array();
$tiley = array();
$tileinfo = array();
mt_srand((double)microtime()*1000000);
$tilestart = mt_rand() % 100;
// Rasteraufbau
$x = 1;
for ($i = 0; $i < 100; $i++)
{
$tile[$i] = 0;
$tilex[$i] = $x;
$x++;
if ($x == 11){$x = 1;}
if ($i < 10){$tiley[$i] = 1;}
if ($i > 9 AND $i < 20){$tiley[$i] = 2;}
if ($i > 19 AND $i < 30){$tiley[$i] = 3;}
if ($i > 29 AND $i < 40){$tiley[$i] = 4;}
if ($i > 39 AND $i < 50){$tiley[$i] = 5;}
if ($i > 49 AND $i < 60){$tiley[$i] = 6;}
if ($i > 59 AND $i < 70){$tiley[$i] = 7;}
if ($i > 69 AND $i < 80){$tiley[$i] = 8;}
if ($i > 79 AND $i < 90){$tiley[$i] = 9;}
if ($i > 89 AND $i < 100){$tiley[$i] = 10;}
if ($i == $tilestart){$tile[$i] = 1;}
}
for ($k = 1; $k < 3; $k++)
{
// Wegfindung: mögliche Wege
$weg = '';
$suchen = 1;
$tilenext = $tilestart;
if ($tiley[$tilenext] > 1) {$wegn = 1; $weg = $weg.'N OK<br />';} else {$wegn = 0;}
if ($tilex[$tilenext] < 10) {$wego = 1; $weg = $weg.'O OK<br />';} else {$wego = 0;}
if ($tiley[$tilenext] < 10) {$wegs = 1; $weg = $weg.'S OK<br />';} else {$wegs = 0;}
if ($tilex[$tilenext] > 1) {$wegw = 1; $weg = $weg.'W OK<br />';} else {$wegw = 0;}
// Wegfindung: nächstes Tile
if ($wegn = 1 AND $wego = 0 AND $wegs = 0 AND $wegw = 0) // 1000
{$tilenext = $tilenext - 10; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 0 AND $wego = 1 AND $wegs = 0 AND $wegw = 0) // 0100
{$tilenext = $tilenext +1; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 0 AND $wego = 0 AND $wegs = 1 AND $wegw = 0) // 0010
{$tilenext = $tilenext + 10; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 0 AND $wego = 0 AND $wegs = 0 AND $wegw = 1) // 0001
{$tilenext = $tilenext - 1; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 1 AND $wego = 1 AND $wegs = 0 AND $wegw = 0) // 1100
$wohin = mt_rand() % 2 + 1; if ($wohin == 1){$tilenext = $tilenext - 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 2){$tilenext = $tilenext + 1; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 1 AND $wego = 0 AND $wegs = 1 AND $wegw = 0) // 1010
$wohin = mt_rand() % 2 + 1; if ($wohin == 1){$tilenext = $tilenext - 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 2){$tilenext = $tilenext + 10; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 1 AND $wego = 0 AND $wegs = 0 AND $wegw = 1) // 1001
$wohin = mt_rand() % 2 + 1; if ($wohin == 1){$tilenext = $tilenext - 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 2){$tilenext = $tilenext - 1; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 1 AND $wego = 1 AND $wegs = 1 AND $wegw = 0) // 1110
$wohin = mt_rand() % 3 + 1; if ($wohin == 1){$tilenext = $tilenext - 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 2){$tilenext = $tilenext + 1; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 3){$tilenext = $tilenext + 10; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 1 AND $wego = 1 AND $wegs = 0 AND $wegw = 1) // 1101
$wohin = mt_rand() % 3 + 1; if ($wohin == 1){$tilenext = $tilenext - 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 2){$tilenext = $tilenext + 1; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 3){$tilenext = $tilenext - 1; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 1 AND $wego = 0 AND $wegs = 1 AND $wegw = 1) // 1011
$wohin = mt_rand() % 3 + 1; if ($wohin == 1){$tilenext = $tilenext - 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 2){$tilenext = $tilenext + 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 3){$tilenext = $tilenext - 1; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 0 AND $wego = 1 AND $wegs = 1 AND $wegw = 1) // 0111
$wohin = mt_rand() % 3 + 1; if ($wohin == 1){$tilenext = $tilenext + 1; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 2){$tilenext = $tilenext + 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 3){$tilenext = $tilenext - 1; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 1 AND $wego = 1 AND $wegs = 1 AND $wegw = 1) // 1111
$wohin = mt_rand() % 4 + 1; if ($wohin == 1){$tilenext = $tilenext - 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 2){$tilenext = $tilenext + 1; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 3){$tilenext = $tilenext + 10; $tile[$tilenext] = 2; $suchen = 0;}
if ($wohin == 4){$tilenext = $tilenext - 1; $tile[$tilenext] = 2; $suchen = 0;}
elseif ($suchen == 1 AND $wegn = 0 AND $wego = 0 AND $wegs = 0 AND $wegw = 0) // 0000
{$tile[$tilenext] = 3; $mapend = 1;}
$tileinfo[$tilestart] = 'Start: '.$tilestart.'<br />Wohin: '.$wohin.'<br />Next: '.$tilenext.'<br />'.$weg;
$tilestart = $tilenext;
}
$mapend = $tilenext;
$tile[$mapend] = 3;
// Kartenausgabe
for ($i = 0; $i < 100; $i++)
{
if ($tile[$i] == 0)
{
echo '<div class="maptile_empty">'.$i.'['.$tile[$i].']<br />'.$tilex[$i].'/'.$tiley[$i].'</div>';
}
if ($tile[$i] == 1)
{
echo '<div class="maptile_start" title="'.$tileinfo[$i].'">'.$i.'<br />'.$tile[$x][$y].'</div>';
}
if ($tile[$i] == 2)
{
echo '<div class="maptile_dungeon" title="'.$tileinfo[$i].'">'.$i.'<br />'.$tile[$x][$y].'</div>';
}
if ($tile[$i] == 3)
{
echo '<div class="maptile_end" title="'.$tileinfo[$i].'">'.$i.'<br />'.$tile[$x][$y].'</div>';
}
}
?>
</div>