Der Weg zum eigenen Browsergame - Truppenbewegungen
Um eine Truppe von A nach B marschieren zu lassen, benötigen wir nicht mehr als die Koordinaten der Punkte, die Geschwindigkeit der Soldaten und den Zeitpunkt an dem sie losgelaufen sind.
Unser Ziel
Wir wollen einen Trupp verschiedener Soldaten auf unserer Karte von Punkt A nach Punkt B marschieren lassen.
Vorbereitung
Legen wir mal folgende globale Konstanten fest, die wir für unsere Berechnungen benötigen:
MAP_POINT_A_X = X-Koordinate des Startpunktes
MAP_POINT_A_Y = Y-Koordinate des Startpunktes
MAP_POINT_B_X = X-Koordinate des Zielpunktes
MAP_POINT_B_Y = Y-Koordinate des Zielpunktes
FIELDS_PER_SECOND = Anzahl der Felder die der Trupp pro Sekunde zurücklegt
TROOP_START_TIME = Zeitpunkt an dem der Trupp losgeschickt wurde als Zeitstempel
NOW = Aktueller Zeitpunkt als Zeitstempel
Berechnung der Wegstrecke
function getDistance($a_x, $a_y, $b_x, $b_y) { // a²+b²=c² $a = abs($b_x - $a_x); $b = abs($b_y - $a_y); $c = sqrt( ($a*$a) + ($b*$b) ); return $c; }
Die Funktion getDistance() liefert uns die Distanz zwischen zwei Punkten. Wir verwenden hier den Satz des Pythagoras: "Die Summe der Quadrate über den Katheten ist gleich dem Quadrat über der Hypotenuse". Hierbei wird der direkte Weg zwischen den Punkten berechnet. Wer einen realistischeren Weg bevorzugt, sollte sich mal den A* (A-Star) Algorithmus anschauen. Hier bezahlt man aber den Realismus mit der Spielperformance.
Berechnen wir also nun die Wegstrecke die unser Trupp zurücklegen muss.
$distance = getDistance(MAP_POINT_A_X, MAP_POINT_A_Y, MAP_POINT_B_X, MAP_POINT_B_Y);
Die Ankunftszeit
function getArrivalTime($start_time, $fields_per_second, $distance) { $seconds = round($distance / $fields_per_second); $arrival_time = $start_time + $seconds; return $arrival_time; }
Um die Ankunftszeit unseres Trupps berechnen zu können, benötigen wir 3 Informationen. Die Startzeit, also wann die Jungs losgelaufen sind, die Anzahl der Felder die der Trupp pro Sekunde zurücklegt, und die zurückzulegende Distanz (in Feldern).
Mit Hilfe der Funktion berechnen wir also die Ankunftszeit folgendermaßen:
$arrival_time = getArrivalTime(TROOP_START_TIME, FIELDS_PER_SECOND, $distance);
Ist der Trupp schon da?
Um ein Event auszulösen, müssen wir feststellen können, ob der Trupp sein Ziel bereits erreicht hat. Das erledigt folgende kleine Funktion.
function hasArrived($arrival_time, $now) { return $arrival_time <= $now; }
Ist der Zeitstempel (in Sekunden) der die Ankunftszeit darstellt kleiner oder gleich dem aktuellen Zeitstempel, wurde die komplette Wegstrecke zurückgelegt und der Trupp gilt als angekommen.
$has_arrived = hasArrived($arrival_time, NOW); if ($has_arrived) { echo 'Der Trupp hat sein Ziel erreicht.'; # Ausführen des Events ... } else { echo 'Der Trupp ist unterwegs. Ankunftszeit: '.date("d.m.Y H:i:s", $arrival_time); }
Die Fortschrittsanzeige
Um den Spieler bei Laune zu halten, kann man ihm anstelle der Ankunftszeit, die ja nicht sehr Benutzerfreundlich ist, eine Fortschrittsanzeige anbieten.
function getCompletetPercentage($arrival_time, $start_time, $now) { $total_duration = $arrival_time - $start_time; $seconds_until_now = $now - $start_time; return round($total_duration / $seconds_until_now); }
Jetzt können wir, neben der Ankunftszeit, auch noch die bereits zurückgelegte Strecke in Prozent anzeigen lassen.
if ($has_arrived) { echo 'Der Trupp hat sein Ziel erreicht.'; } else { $p = getCompletetPercentage($arrival_time, TROOP_START_TIME, NOW) echo 'Der Trupp hat bereits '.$p.'% der Wegstrecke zurückgelegt. Ankunftszeit: '.date("d.m.Y H:i:s", $arrival_time); }
Schlusswort
Um eine Truppenbewegung zu realisieren bedarf es also wirklich nicht viel. Die hier beschriebenen Funktionen lassen sich auch sehr gut in einer Klasse zusammenfassen und immer wieder verwenden.
Die Beschaffung der Daten, die ich hier aus Gründen der Einfachheit in Konstanten gepackt habe, sollte üblicherweise über eine Datenbank laufen.
Kapi Bados - Cocktails, Sonne, Strand und mehr
Kapi Bados - Cocktails, Sonne, Strand und mehr
In Kapi Bados wartet dein Strandgarten.
Weiterlesen...Castle Fight
![]()
Castle Fight - Browserspiel im heiligen Land
Erobere die Macht im heiligen Land - das Aufbau-Strategie Browserspiel Castle Fight.
Weiterlesen...Ars Regendi - politische Wirtschaftssimulation
![]()
Ars Regendi - politisches Browsergame und Wirtschaftssimulation
Führe deinen eigenen Staat in einer realistisch simulierten Welt.
Weiterlesen...Der Weg zum eigenen Browsergame - Das Eventsystem

Der Weg zum eigenen Browsergame
Thema: Das Eventsystem
Weiterlesen...Der Weg zum eigenen Browsergame - Die Karte

Der Weg zum eigenen Browsergame
Thema: Die Karte
Weiterlesen...







