Ich habe mal Testweise eine Art Karte mit PHP programmiert. Es ist eine simple viereckige Karte, ein "User" bekommt eine x und eine y Koordinate und besetzt einen Platz. Anschauen kann man sich das ganze hier: http://baukasten.myxotod.de/test/
An sich klappt alles, so wie ich mir das vorgestellt habe. Über das Formular kann man zu einer bestimmten Koordinate springen (diese wird dann in der Mitte der Karte angezeigt). Links kann man sich durch die Karte navigieren.
Auf der Minimap sieht man wo man sich gerade gefindet und unten sieht man den Ausschnitt wo man gerade ist. Rote Felder bedeutet, dass dieses Feld bereits besetzt ist.
Mein Problem hier ist nur die Ladezeit. Bei einer Kartegröße bis ca. 100 x 100 Kästchen geht es noch. Danach brauch der Browser ewig zum Laden und stürzt teilweise sogar ab. Grund ist vermutlich die Minimap, weil die Schleifen dort einfach zu oft durchlaufen Ich wollte einfach mal hier nachfragen, ob jemand eine Idee zum optimieren hat. Hier ist der Quellcode:
<?php
$start = time()+(double)microtime();
// Koordinaten der einzelnen User
$users[1]['x'] = 1;
$users[1]['y'] = 2;
$users[2]['x'] = 5;
$users[2]['y'] = 5;
$users[3]['x'] = 8;
$users[3]['y'] = 6;
$users[4]['x'] = 9;
$users[4]['y'] = 10;
$users[5]['x'] = 44;
$users[5]['y'] = 39;
$users[6]['x'] = 25;
$users[6]['y'] = 25;
$anzeige['width'] = 9; // Breite der Anzeigefläche
$anzeige['height'] = 9; // Höhe der Anzeigefläche
$offset['width'] = round($anzeige['width'] / 2); // Berechnet den Abstand nach links
$offset['height'] = round($anzeige['height'] / 2); // Berechnet den Abstand nach oben
$map['width'] = 50; // Die Gesamtgröße (Breite) der Karte
$map['height'] = 50; // Die Gesamtgröße (Höhe) der Karte
if (isset($_GET['y']) && !empty($_GET['y'])) {
$y_coord = $_GET['y'] - $offset['height'];
} else {
$y_coord = 0;
}
if (isset($_GET['x']) && !empty($_GET['x'])) {
$x_coord = $_GET['x'] - $offset['width'];
} else {
$x_coord = 0;
}
if ($y_coord < 0) {
$y_coord = 0;
} else if ($y_coord > ($map['height'] - $anzeige['height'])) {
$y_coord = $map['height'] - $anzeige['height'];
}
if ($x_coord < 0) {
$x_coord = 0;
} else if ($x_coord > ($map['width'] - $anzeige['width'])) {
$x_coord = $map['width'] - $anzeige['width'];
}
echo "<div style='float: left; width: 270px;'>";
echo "<p><strong>Mapgröße: ".$map['width']."x".$map['height']." Felder</strong></p>";
echo "<form action='' method='get'>";
echo "X-Koordinate: <input type='text' name='x' /><br />";
echo "Y-Koordinate: <input type='text' name='y' /><br />";
echo "<input type='submit' name='submit' value='show' />";
echo "</form>";
echo "<a href='?x=".($x_coord + $offset['width'])."&y=".(($y_coord + $offset['height']) - 1)."'>Nach oben</a><br />";
echo "<a href='?x=".($x_coord + $offset['width'])."&y=".(($y_coord + $offset['height']) + 1)."'>Nach unten</a><br />";
echo "<a href='?x=".(($x_coord + $offset['width']) - 1)."&y=".($y_coord + $offset['height'])."'>Nach links</a><br />";
echo "<a href='?x=".(($x_coord + $offset['width']) + 1)."&y=".($y_coord + $offset['height'])."'>Nach rechts</a><br />";
echo "</div>";
echo "<div style='float: left; width: 800px; padding-top: 25px; padding-left: 25px;'>";
echo "<strong>Minimap:</strong>";
echo "<table cellspacing='1px' cellpadding='0px'>";
for ($y=0;$y<=$map['height'];$y++) {
echo "<tr>";
for ($x=0;$x<=$map['width'];$x++) {
$taken = false;
foreach ($users As $user) {
if ($user['x'] == $x && $user['y'] == $y) {
echo "<td style='width: 2px; height: 2px; background-color: #ff0000;'>";
echo "";
echo "</td>";
$taken = true;
break;
}
}
if ($taken == false) {
if (($x > $x_coord && $x <= ($x_coord + $anzeige['width'])) && ($y > $y_coord && $y <= ($y_coord + $anzeige['height']))) {
echo "<td style='width: 2px; height: 2px; background-color: #999999;'>";
} else {
echo "<td style='width: 2px; height: 2px; background-color: #dedede;'>";
}
echo "";
echo "</td>";
}
}
echo "</tr>";
}
echo "</table>";
echo "</div>";
echo "<br style='clear: both;' />";
echo "<table>";
for ($y=$y_coord;$y<=($y_coord + $anzeige['width']);$y++) {
echo "<tr>";
for ($x=$x_coord;$x<=($x_coord + $anzeige['width']);$x++) {
if ($y == $y_coord) {
if ($x == $x_coord && $y == $y_coord) {
echo "<th style='width: 50px; height: 50px;'></th>";
} else {
echo "<th style='width: 50px; height: 50px;'>".$x."</th>";
}
} else if ($x == $x_coord) {
echo "<th style='height: 50px; width: 50px;'>".$y."</th>";
} else {
$taken = false;
foreach ($users As $user) {
if ($user['x'] == $x && $user['y'] == $y) {
echo "<td style='width: 50px; height: 50px; background-color: #ff0000;'>";
echo "";
echo "</td>";
$taken = true;
break;
}
}
if ($taken == false) {
echo "<td style='width: 50px; height: 50px; background-color: #447744;'>";
echo "";
echo "</td>";
}
}
}
echo "</tr>";
}
echo "</table>";
$ende = time()+(double)microtime();
$diff = round($ende-$start,6);
echo "<p>Skript wurde ausgeführt in ".$diff." Sekunden</p>";
?>
Alles anzeigen