error en mi codigo

Previous topic - Next topic

Jonás Perusquía

Bueno, hago este post para pedirles su ayuda amigos de GLBasic, ya que he escrito un código que tiene 3 opciones, en 3 IF diferentes, el problema es que solo es usable la opción 1, las demás solo aparece en negro... se supone que la opcion 3 debe de SALIR, pero no lo hace...

aqui el código:
Code (glbasic) Select
//--MAIN COMMANDS
SETCURRENTDIR("Media")
LIMITFPS 60
LOADFONT "smalfont.png", 0
GETSCREENSIZE sx,sy
//--variables
GLOBAL sx,sy

//--CODE STARTS

PRINT "Presiona una tecla para continuar", sx/2-130,sy/3
SHOWSCREEN
KEYWAIT
GOTO menu

menu:
CLEARSCREEN
LOCAL x$,r$
PRINT "Bienvenido aventurero! Dime, ¿Cual es tu nombre?", sx/2-170,sy/4
INPUT x$, sx/2-50,sy/2
SHOWSCREEN
PRINT "Excelente! Bienvenido " + x$ + "!", sx/2-140,sy/3
SHOWSCREEN
KEYWAIT
GOTO ops

ops:
CLEARSCREEN
PRINT "Despiertas en tu casa vacía, y te diriges a la cocina...",sx/5,sy/3
PRINT "¿Qué deseas hacer?",sx/5, sy/3+30
PRINT "a) Comer manzana",sx/5,sy/3+50
PRINT "b) Beber agua",sx/5,sy/3+60
PRINT "c) Salir de PRUEBA",sx/5,sy/3+70
INPUT r$,sx/5,sy/3+90
SHOWSCREEN

WHILE TRUE
IF r$ = "a" THEN PRINT "chop* chop* chop*", sx/5,sy/3+110
SHOWSCREEN
KEYWAIT
GOTO ops

IF r$ = "b" THEN PRINT "gulp* gulp* gulp*", sx/5,sy/3+110
SHOWSCREEN
KEYWAIT
GOTO ops

IF r$ = "c" THEN PRINT "Gracias por testear PRUEBA!", sx/5,sy/3+110
SHOWSCREEN
KEYWAIT
END
WEND
<HTML><BASIC><EC>
Be free and do good things

Alex_R

Hola jonaspm:

El problema está en que el IF ejecuta sólo como condicional lo que viene depués del THEN, dentro de esa línea. El resto lo ejecuta si o sí. Entonces debes evitar el THEN y acabar el condicional con un ENDIF que englobe todas tus instrucciones. De esta forma:

Code (glbasic) Select

IF r$ = "a"
PRINT "chop* chop* chop*", sx/5,sy/3+110
SHOWSCREEN
KEYWAIT
GOTO ops
ENDIF



Jonás Perusquía

he dicho lo que dices, he eliminado los THEN del código, el problema ahora es que no me deja compilar, pues dice que al último IF le falta THEN o ENDIF:

Code (glbasic) Select
IF r$ = "c"
PRINT "Gracias por testear PRUEBA!", sx/5,sy/3+110
SHOWSCREEN
KEYWAIT
END
ENDIF
<HTML><BASIC><EC>
Be free and do good things

hardyx

Posiblemente te falta un ENDIF también en la primera o en la segunda opción. Pero tienes otro problema, y es que tienes un bucle WHILE infinito, con GOTOS a fuera del bucle. Lo cual es un sacrilegio en programación :D. Ese WHILE debería de incluir desde el CLEARSCREEN hasta el final. Y no te harían falta los GOTOS que lian bastante, cuando el programa sea mucho más grande te puedes volver loco. El 99% de los programas se pueden hacer sin GOTO, sólo usando bloques WHILE...WEND, bucles FOR...NEXT e IF...ENDIF.