Hallo, ich habe folgendes Problem:
Ich habe eine Karte, die eigentlich (5*5)*(4*4)*(3*3) felder hat... sprich im grunde ein Würfel ist, wenn man es so nimmt...
jetzt möchte ich aber gerne wenn meine Karte 25*16*9 groß ist, das ich von 1*1*1 genauso lange zu 25*16*9 brauche, wie zu 1*1*2 denn diese Felder würden eigentlich neben einander liegen.
Noch habe ich die Karten Funktion nicht angepasst, die würde eigentlich dann so springen, das wenn man am rechten Rand ist, das man zurück zum linken Anfang kommt, dass dann aber in jede Richtung.
Mein Ziel ist es eigentlich, das egal wo ich auf der Karte bin immer den Kürzesten Weg über den Kartenrand (Runde Welt zumindest so vorgestellt) hinweg findet.
Kann mir dabei jemand Helfen? Ich weiß nicht mehr wo ich ansetzen soll, ist mein erstes Browsergame was ich zu Programmieren versuche.
Vielen Dank!
Hier einfach mal mein Code:
Ich habe eine Karte, die eigentlich (5*5)*(4*4)*(3*3) felder hat... sprich im grunde ein Würfel ist, wenn man es so nimmt...
jetzt möchte ich aber gerne wenn meine Karte 25*16*9 groß ist, das ich von 1*1*1 genauso lange zu 25*16*9 brauche, wie zu 1*1*2 denn diese Felder würden eigentlich neben einander liegen.
Noch habe ich die Karten Funktion nicht angepasst, die würde eigentlich dann so springen, das wenn man am rechten Rand ist, das man zurück zum linken Anfang kommt, dass dann aber in jede Richtung.
Mein Ziel ist es eigentlich, das egal wo ich auf der Karte bin immer den Kürzesten Weg über den Kartenrand (Runde Welt zumindest so vorgestellt) hinweg findet.
Kann mir dabei jemand Helfen? Ich weiß nicht mehr wo ich ansetzen soll, ist mein erstes Browsergame was ich zu Programmieren versuche.
Vielen Dank!
Hier einfach mal mein Code:
PHP:
define("WORLD_POS1",25); // MAX_X_POS1 * MAX_Y_POS1
define("WORLD_POS2",16); // MAX_X_POS2 * MAX_Y_POS2
define("WORLD_POS3",9); // MAX_X_POS3 * MAX_Y_POS3
define("MAX_X_POS1",5); // X = Y && Y = X kann sich eigentlich nie ändern
define("MAX_Y_POS1",5);
define("MAX_X_POS2",4); // X = Y && Y = X kann sich eigentlich nie ändern
define("MAX_Y_POS2",4);
define("MAX_X_POS3",3); // X = Y && Y = X kann sich eigentlich nie ändern
define("MAX_Y_POS3",3);
// Inselgruppen Navigation
function jumpIgUp($oz,$gr){
if ($gr > MAX_X_POS2)
$retval = array($oz,$gr - MAX_X_POS2);
else
$retval = array($oz - MAX_X_POS1, $gr + MAX_X_POS2 * MAX_X_POS2 - MAX_X_POS2 );
if ($retval[0] <= 0)
$retval = array($oz,$gr);
return $retval;
}
function jumpIgDown($oz,$gr){
if ($gr <= (MAX_X_POS2*MAX_X_POS2-MAX_X_POS2))
$retval = array($oz,$gr + MAX_X_POS2);
else
$retval = array($oz + MAX_X_POS1, $gr - MAX_X_POS2 * MAX_X_POS2 + MAX_X_POS2 );
if ($retval[0] > (MAX_X_POS1 * MAX_Y_POS1))
$retval = array($oz,$gr);
return $retval;
}
function jumpIgRight($oz,$gr){
if (ceil($gr/MAX_Y_POS2) == $gr/MAX_Y_POS2){
if (ceil($oz/MAX_Y_POS1) == $oz/MAX_Y_POS1)
$retval = array($oz, $gr);
else
$retval = array($oz+1, $gr - MAX_Y_POS2 + 1);
}
else
$retval = array($oz, $gr+1);
return $retval;
}
function jumpIgLeft($oz,$gr){
if ((ceil($gr/MAX_Y_POS2)*MAX_Y_POS2-MAX_Y_POS2+1) == $gr){
if ((ceil($oz/MAX_Y_POS1)*MAX_Y_POS1-MAX_Y_POS1+1) == $oz)
$retval = array($oz, $gr);
else
$retval = array($oz-1, $gr + MAX_Y_POS2 - 1);
}
else
$retval = array($oz, $gr-1);
return $retval;
}
// Wird benötigt, um einen X und Y Wert einer Insel zu erhalten (Diese wird in getDistance weiterverwendet)
function getPosWater($ozean, $gruppe, $position){
$ozean--; $gruppe--; $position--;
$ozx = floor($ozean / MAX_X_POS1);
$ozy = $ozean - MAX_X_POS1 * $ozx;
$grx = floor($gruppe / MAX_X_POS2);
$gry = $gruppe - MAX_X_POS2 * $grx;
$isx = floor($position / MAX_X_POS3);
$isy = $position - MAX_X_POS3 * $isx;
$posy = $ozy * MAX_Y_POS2 * MAX_Y_POS3 + $gry * MAX_Y_POS3 + $isy;
$posx = $ozx * MAX_X_POS2 * MAX_X_POS3 + $grx * MAX_X_POS3 + $isx;
return array($posx, $posy);
}
// Entfernungsberechnung
function getDistance($srcx, $srcy, $dstx, $dsty){
if ($srcx > $dstx)
$difx = $srcx - $dstx;
else
$difx = $dstx - $srcx;
if ($srcy > $dsty)
$dify = $srcy - $dsty;
else
$dify = $dsty - $srcy;
$res = sqrt($dify * $dify + $difx * $difx);
return round($res);
}
Zuletzt bearbeitet: