Autor Thema: too many nested else/if statements  (Gelesen 4921 mal)

Edison Interactive

  • Gast
too many nested else/if statements
« am: 09. April 2007, 13:31:55 »
Hi,

haben da so ein kleines Problem mit Türen...

Verwenden die Funktion any_click_on_door für unsere Türen...

nun gibt es ein Problem, da wir in

function VariableExtensions (string location) {
  int r = character [GetPlayerCharacter ()].room;
  int o = GetObjectAt (mouse.x, mouse.y);
  int h = GetHotspotAt (mouse.x, mouse.y);

        if ((r == 1) && (h == 4)) OpenCloseExtension (3, location);
  else if ((r == 2) && (h == 2)) OpenCloseExtension (3, location);

[...]
  else if ((r == 87) && (h == 3)) OpenCloseExtension (43, location); 
  else if ((r == 88) && (h == 1)) OpenCloseExtension (43, location);
[...]

}

anscheinend zu viele "else if"-Verknüpfungen haben...

allerdings geht es nicht sparsamer... gibt es eine Möglichkeit, das zu umgehen? vielleicht eine zweite Funktion zu schreiben, die dann nicht mit ">v" nach dem Hotspot, sondern mit einem anderen Buchstaben ( zum Beispiel ">b") aufgerufen werden kann? Wie müssen wir da genau vorgehen?

Vielen Dank





Timer

  • volljähriger Tentakel
  • *****
  • Beiträge: 763
  • Geschlecht: Männlich
    • ICQ Messenger - 275798409
    • AOL Instant Messenger - commandertimer
    • Profil anzeigen
    • Meine Seite
    • E-Mail
Re: too many nested else/if statements
« Antwort #1 am: 09. April 2007, 14:27:48 »
Um sowas mit >b aufzurufen, würde ich es so angehen:

Ihr erstellt zuerst unter der function "VariableExtensions" eine function mit gleichem Inhalt:

function VariableExtensions1 (string location){
  // put here wich extension will show the things with variable extension (>b)
  int r = character [GetPlayerCharacter ()].room;
  int o = GetObjectAt (mouse.x, mouse.y);
  int h = GetHotspotAt (mouse.x, mouse.y);
  // hier dann die Türen genauso wie in VariableExtensions eintragen
}

Dann schreibt bei der function "CheckDefaultAction", direkt unter:
  else if (Extension (location) == 'v')
  {
    // if the default action deppends on some events
    RemoveExtension (location);
    VariableExtensions (location);
  }
.... das hier:
  else if (Extension (location) == 'b')
  {
    RemoveExtension (location);
    VariableExtensions1 (location);
  }

Das müsste eigentlich funktionieren. Habe es zwar nicht ausprobiert, aber trotzdem. ;D

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: too many nested else/if statements
« Antwort #2 am: 16. April 2007, 20:09:28 »
Grad erst gesehen:
Einfach die ganzen "else"s weglöschen, die braucht man ja eh nicht.

Damit wird aus einem riesigen if-else if-...-else if-Block einfach eine lange Reihe einzelner if-Blöcke.
Sollte klappen.

Alternativ kann man auch die Räume zusammenfassen:
if (r==10) {
  if (h==1) OpenCloseExtension(5, location);
  if (h==2) OpenCloseExtension(6, location);
  ...
}
if (r==11) {
  if (h==1) OpenCloseExtension(7, location);
  if (h==2) OpenCloseExtension(5, location);
  ...
}
...

Noch besser:
int a;

if (r==10) {
  if (h==1) a=5;
  if (h==2) a=6;
  ...
}
...
OpenCloseExtension(a, location);
« Letzte Änderung: 16. April 2007, 20:27:14 von KhrisMUC »