Frage zu Select / Case / End Select

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Jolinah

Betreff: Frage zu Select / Case / End Select

BeitragFr, Feb 13, 2004 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss nicht ob das schonmal gefragt wurde. Habe jedoch nichts gefunden im Forum:


Gibt es eine möglichkeit Select abzubrechen (zu verlassen) so wie bei den Schleifen mit Exit?

Exit funktioniert anscheinend nur bei schleifen, Return hat auch nicht geklappt. End Select funzt auch nicht, darf nur 1 mal am Ende vorkommen..

Ich habe natürlich daran gedacht goto zu verwenden, aber das möcht ich nur einsetzen wenn es keine andere Methode gibt.

Man könnte natürlich auch mit einer If abfrage regeln ob der code darunter noch ausgeführt werden soll, aber ich möchte auch nicht zu viele unnötige if abfragen, dann doch lieber goto Wink
 

Apocalyptic

BeitragFr, Feb 13, 2004 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu willst du eine Select Abfrage beenden? Sobald eine Bedingung erfüllt wurde, werden keine weiteren überprüft... Wo liegt dein Problem?
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragFr, Feb 13, 2004 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Abbrechen? Wozu?
Sobald ein Case zutrifft wird automatisch abgebrochen, so dass die anderen Cases gar nicht mehr geprüft werden.

Edit: Mist zu lahm. Egal dann mache ich noch ein Beispiel Wink
Code: [AUSKLAPPEN]
x=2
select x
 case 2 print "erster case"
 case 2 print "zweiter case"
end select
waitkey

- gibt nur "erster case" aus
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com |
www.CarnageContest.com | www.Stranded3.com
 

Cloud

BeitragFr, Feb 13, 2004 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
nen direkten Befehl gibt es meines Wissens nicht.

Aber wozu brauchst du das, erläuter das mal ich glaube nicht das es nötig ist die Select anweisung plötztlich zu verlassen, da immer nur eine Case anweisung ausgeführt wird und dann Select verlassen wird
Schreib hier mal was du da machen willst.
Duron 1200 | 256 RAM | Geforce 2 TI

Jolinah

BeitragFr, Feb 13, 2004 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja ich bin grad an nem kleinen rpg. Da will ich sowas wie Aktionen Einfügen (Befehle) die ich dann später mal vielleicht per einfachem Skript ausführen lassen kann.

Das ganze könnt ich wohl schon anders lösen ohne das ich dazu Select brauche oder Case plötzlich beenden müsste. Aber ich dachte halt das es so recht praktisch wäre Wink


Code: [AUSKLAPPEN]

Select command
  Case COMMAND_MOVE_RIGHT
    If cmd_init = 0
      cmd_init = 1
      cmd_tempx = player\x / 40
      cmd_sollx = cmd_tempx + 1
      
      If level(cmd_sollx,player\y / 40) > 0
        cmd_init = 0
        command = COMMAND_NONE
        ;--> Hier möchte ich beenden damit das unten nicht ausgeführt wird.
        ;--> Wenn möglich eben ohne das unten mit einer If abfrage zu regeln.
      EndIf

    EndIf

    player\x = player\x + 2
      
    If player\x / 40 = cmd_sollx And player\x >= cmd_sollx * 40
      player\x = cmd_sollx * 40
      cmd_init = 0
      command = COMMAND_NONE
    EndIf
   
  Case COMMAND_MOVE_LEFT
    .....
End Select


Habe mehrere Aktionen gemacht, z.bsp eben das der Player in eine bestimte richtung läuft. Das cmd_init sorgt dafür das der obere code im Case nur 1 mal ausgeführt wird. Dort wird die Player pos gespeichert und die nächste Soll Pos. Ist aber das Feld nicht frei wo der Player hinlaufen soll dann sollte das ganze abgebrochen werden.

Kann man auch ganz anders lösen ich weiss...


Ich kenn so ähnliche Sachen aus Visual Basic .Net
Da kann man praktisch überall abbrechen, deshalb hab ich gefragt. Aber da es in BB wohl nicht geht mach ich es halt anders Wink

Hubsi

BeitragFr, Feb 13, 2004 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist ja kein Problem:

Code: [AUSKLAPPEN]
Select command
  Case COMMAND_MOVE_RIGHT
    If cmd_init = 0
      cmd_init = 1
      cmd_tempx = player\x / 40
      cmd_sollx = cmd_tempx + 1
       
      If level(cmd_sollx,player\y / 40) > 0
        cmd_init = 0
        command = COMMAND_NONE
        ;--> Hier möchte ich beenden damit das unten nicht ausgeführt wird.
        ;--> Wenn möglich eben ohne das unten mit einer If abfrage zu regeln.
      EndIf

    EndIf
  if not command=COMMAND_NONE ; eingefügt
    player\x = player\x + 2
       
    If player\x / 40 = cmd_sollx And player\x >= cmd_sollx * 40
      player\x = cmd_sollx * 40
      cmd_init = 0
      command = COMMAND_NONE
    EndIf
  endif ; eingefügt
  Case COMMAND_MOVE_LEFT
    .....
End Select
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Jolinah

BeitragFr, Feb 13, 2004 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
;--> Wenn möglich eben ohne das unten mit einer If abfrage zu regeln.


Zitat:
Kann man auch ganz anders lösen ich weiss...



Ich wollte ja nur fragen ob es die Möglichkeit gibt zum abbrechen Wink
Aber trotzdem danke für alle antworten, ich hab das jetzt auch so ähnlich gemacht wie Hubsi geschrieben hat.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group