Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Thema gestartet von: Edison Interactive am 09. April 2007, 13:31:55

Titel: too many nested else/if statements
Beitrag von: Edison Interactive 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




Titel: Re: too many nested else/if statements
Beitrag von: Timer 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
Titel: Re: too many nested else/if statements
Beitrag von: KhrisMUC 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);