Verständnisproblem Aktionsteil 'sonst'

  • #1, by FantozziThursday, 12. February 2015, 12:52 10 years ago
    Setze ich den Aktionsteil 'sonst' nach dem Aktionsteil 'Ende wenn' oder anstelle des Aktionsteils 'Ende wenn' - oder kommt da am Ende was unterschiedliches raus?

    Eine der 'kleinen Sachen', die mir an Visionaire so gut gefallen, ist diese Baumstruktur (gestrichelte Linien), die erzeugt wird, wenn man Konditionen setzt. Das macht verschachtelte Strukturen schön übersichtlich. Der Baumstruktur nach sieht es so aus, als wäre das 'sonst', wenn man es anstelle des 'Ende wenn' setzt ein 'entweder/oder'. Wenn man es nach dem 'Ende wenn' setzt, bedeutet es ein 'wenn nicht/dann'. Ist diese Interpretation korrekt?

    Oder anders gefragt: Wenn ich mehrere Konditionen innerhalb einer Aktion definiert habe. 1. [Wenn Bedingung x wahr dann ... /Ende Wenn]. 2. [Wenn Bedingung y wahr dann .../Ende Wenn] usw. - und nun setze ich ein 'sonst' hinter diese Reihe von Konditionen - bezieht sich das 'sonst' dann auf alle vorherigen Konditionen (wenn nicht/dann)?

    Danke für die Geduld.

    Newbie

    31 Posts


  • #2, by LebosteinThursday, 12. February 2015, 14:14 10 years ago
    Das ist einfach der Teil der ausgeführt wird, wenn deine Bedingung nicht erfüllt ist. Zum Beispiel:
    Wenn Bedingung Heizung = Wahr, dann
        Held spricht: "Die Heizung ist an".
    sonst
        Held spricht: "Die Heizung ist aus".
    Ende wenn
    


    Der Block "sonst" ist optional und muss nicht eingebaut werden, macht aber vieles einfacher. Es würde auch so funktionieren:
    Wenn Bedingung Heizung = Wahr, dann
        Held spricht: "Die Heizung ist an".
    Ende wenn
    Wenn Bedingung Heizung = Falsch, dann
        Held spricht: "Die Heizung ist aus".
    Ende wenn
    


    Was du dir in deiner letzten Frage wünschst, ist das sogenannte "else if" oder "sonst, wenn". Hier kann man unterschiedliche Bedingungen kombinieren und zusätzlich ein "sonst" anhängen, falls keine der genannte Bedingungen erfüllt wird. Leider gibt es das in Visionaire noch nicht. Damit könnte man dann sowas machen:
    Wenn Wert Heizung = 1, dann
        Held spricht: "Die Heizung steht auf Stufe 1".
    sonst, wenn Wert Heizung = 2, dann
        Held spricht: "Die Heizung steht auf Stufe 2".
    sonst, wenn Wert Heizung = 3, dann
        Held spricht: "Die Heizung steht auf Stufe 3".
    sonst
        Held spricht: "Die Heizung ist aus".
    Ende wenn
    

    Key Killer

    621 Posts

  • #3, by afrlmeThursday, 12. February 2015, 14:55 10 years ago
    The third example looks incorrect to me (if this is action part based). There should be an end if to close each if query because else is not elseif.

    In Lua script it is the same unless elseif, and, or are used.

    if x then
     -- do something
    end
    

    if x then
     -- do something
    else
     -- do something else
    end
    

    if x then
     if a then
      -- do something
     end
    else
     -- do something if x is false
    end
    

    if x then
     if a then
      -- do something
     else
      -- if x but not a then do something
     end
    else
     -- do something if x is false
    end
    


    The reason I don't like doing queries in the editor with action parts as they can get complicated & confusing very fast, even though there's the tree structure view & collapsible blocks for queries since 4.x.

    I've noticed that most people using Visionaire Studio don't seem to understand how the query system works, as evidenced in the majority of the demo submissions we received for the competition. I noticed that most queries were not closed off at all. The games still ran, but it's not good practice to leave them unclosed. If it were Lua script then it would break your entire script, same as incorrect syntax would do to most programming languages.

    Imperator

    7278 Posts

  • #4, by LebosteinThursday, 12. February 2015, 15:07 10 years ago
    Yes, the third example is only an example, if "elseif" would exist.

    Key Killer

    621 Posts

  • #5, by FantozziFriday, 13. February 2015, 08:25 10 years ago
    Danke. Das 'sonst' entspricht also einem entweder/oder. Das habe ich jetzt verstanden.

    Und es bezieht sich auf das letzte 'wenn' (if), dem es angehängt wird. Und deshalb funktioniert das hier auch nicht:

    http://images.siteface.net/siteface//tmpDirs/CB5F4D8A764DBB7245804409F2FF3315/1_Sonst.png

    Da stehe ich jetzt wieder wie das Kamel am Bahnübergang.

    Wie mache ich es, wenn ich will, dass immer dann, wenn die beiden oberen Konditionen nicht erfüllt sind, das passiert, was bei mir nach dem 'sonst' steht, nur dann eben nicht, wenn eine der beiden (oder beide) anderen Konditionen wahr ist (sind).

    "-- if x but not a then do something" wäre auch ein schöner Operator ...

    aber was ich brauche ist: "if (not x and not y) then do z".

    Was ich suche, ist praktisch so eine Art Klammer um die beiden ersten Bedingungen herum.

    Oder was anderes, was wahrscheinlich ganz einfach ist, worauf jetzt bloß wieder nicht komme.




    Newbie

    31 Posts

  • #6, by FantozziFriday, 13. February 2015, 10:52 10 years ago
    Die folgende Lösung habe ich jetzt gefunden, aber so 'ganz richtig' ist sie auch nicht:

    http://images.siteface.net/siteface//tmpDirs/F4571211642B4FFC8C5722C17486AEA5/1_solved.png

    Im ersten 'Else' (wenn Bedingung 1 falsch ist) frage ich ab, ob auch Bedingung 2 falsch ist.
    Im zweiten 'Else' (wenn Bedingung 2 falsch ist) frage ich ab, ob auch Bedingung 1 falsch ist.

    Eigentlich ziemlich simpel.

    Nun würde ich erwarten, wenn sowohl Bedingung 1 als auch Bedingung 2 falsch sind, dass auch beide 'Else' abgefragt/ausgeführt werden. Und folglich auch das Element "Text_BashtiMurks" doppelt wahr gesetzt wird.

    Ich vermute, das bleibt in der Praxis folgenlos, weil wahrer als wahr geht ja nicht und selbst wenn ich zehnmal das gleiche Element hintereinander wahr setzte, wäre es doch nur einmal wahr.

    Denke ich mal.

    Unter diesem Umstand geht das relativ einfach. Aber daran, dass das überhaupt keine Rolle spielt, wenn der Wahrheitswert einer Bedingung doppelt gesetzt wird, hatte ich zunächst nicht gedacht.



    Newbie

    31 Posts