Ich weiß ja nicht in welcher Programmiersprache das jetzt genau ist, aber wenn du was rekursives machen musst, vielleicht so (in C):
$this->bbcode_second_pass_code('', '
// Gibt Anzahl der gewanderten Stufen zurück
unsigned char moveNikiSteps(unsigned char direction)
{
if (direction == 1)
...; // Niki eine Stufe abwärts gehn lassen
else if (direction == 2)
...; // Niki eine Stufe aufwärts gehn lassen
else
return 0; // Unbekannte Richtung
if (...) // Wenn Niki auf einem Stockwerk steht, und nicht mehr auf der Treppe
return 1;
else
return moveNikiSteps(direction) + 1; // Funktion nochmals aufrufen
}
void NikiTransportDownstairsUpstairs(void)
{
unsigned char count;
count = moveNikiSteps(1); // Niki abwärts gehn lassen, bis er die Treppe verlassen hat [1 = abwärts] - wir brauchen den Zähler später, um die ursprüngliche Position wiederherstellen zu können ==> count = Entfernung unteres Stockwerk <-> ursprüngliche Pos.
...; // Niki das Ding auf seinem aktuellen Feld aufnehmen lassen
count = moveNikiSteps(2) - count; // Niki aufwärts gehn lassen, bis er die Treppe verlassen hat [2 = aufwärts] - der Zähler wird wiederum gebraucht, nur dass die bereits gegangenen Stufen abgezogen werden müssen, da er ja in die andere Richtung geht ==> count = Entfernung oberes Stockwerk <-> ursprüngliche Pos. (wenn das vorherige count nicht abgezogen würde, wäre es oberes Stockwerk <-> unteres)
...; // Niki das aufgenommene Ding auf dem aktuellen Feld ablegen lassen
...; // Niki [I]count[/I] Stufen abwärts gehn lassen --> ursprüngliche Position
}
')
Ich hoffe mal, dass das verständlich war
Wofür die Funktion allerdings rekursiv sein soll, ist mir nicht ganz klar - für mich wäre das mit einer for-Schleife besser gelöst.
Fips
Anm.: Natürlich dürfen die Entfernungen Ausgangsposition <-> Stockwerke 255 Stufen nicht überschreiten, da die Variablen sonst zu klein sind.