GLBasic forum

Other languages => GLBasic - es => Topic started by: Jonás Perusquía on 2012-Apr-27

Title: error en mi codigo
Post by: Jonás Perusquía on 2012-Apr-27
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
Title: Re: error en mi codigo
Post by: Alex_R on 2012-Apr-27
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


Title: Re: error en mi codigo
Post by: Jonás Perusquía on 2012-Apr-28
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
Title: Re: error en mi codigo
Post by: hardyx on 2012-May-04
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.