La primera en la frente

Previous topic - Next topic

Sintax error

Hola todo el mundo,

Soy nuevo por aquí y acabo de aterrizar en GLBasic, mis conocimientos sobre programación son casi nulos, haciendo unas pruebas con algunos códigos de ejemplo me he topado con este error

"DesktopClock.gbas"(38) error : variable is not explicitly defined : fup


Alguien sabe de que va el error ?, que es lo que provoca el error?.

El código en cuestión es le siguiente :
Code (glbasic) Select
// --------------------------------- //
// Project: DesktopClock
// Start: Thursday, August 14, 2008
// IDE Version: 5.341
// Created by Hemlos@glbasic.com
// do a compile: 800x 600 fullscreen mode...looks cool

LOCAL sx,sy,h,w
GETSCREENSIZE sx,sy
GETFONTSIZE w,h
LOCAL cx=sx/2
LOCAL cy=sy/2
AUTOPAUSE FALSE
ALPHAMODE -1
LOADSPRITE "1.png",0
LOADSPRITE "1.png",1

WHILE TRUE
SYSTEMPOINTER FALSE
drawwater()

//jitter effect: turned off..gave me a headache lol
//dosfx=dosfx+1
//IF dosfx>3 THEN dosfx=0
//IF dosfx=10
// velx=RND(4)-2
// vely=RND(4)-2
// cx2=cx
// cx=cx2+velx
// cy2=cy
// cy=cy2+vely
//ENDIF

IF cy>400 THEN cy=400
IF cx>600 THEN cx=600
IF cx<200 THEN cx=200
IF cy<200 THEN cy=200
IF fup=0;  fx1=fx1-1; IF fx1<1; fup=1;ENDIF; ENDIF
IF fup=1;  fx1=fx1+1; IF fx1>250; fup=0;ENDIF;ENDIF
    sxf(RGB(1,1,1),RGB(-fx1,1,1),cx,cy,170,66)
DRAWRING(RGB(20,20,fx1),RGB(-fx1,20,20),cx,cy,245,195)
DRAWRING(RGB(-fx1,20,20),RGB(20,20,fx1),cx,cy,195,170)
DRAWCIRCLE(RGB(1,1,1),cx,cy,66)
DRAWCIRCLE(RGB(fx1,1,1),cx,cy,200)
DRAWCIRCLE(RGB(1,1,fx1),cx,cy,240)
  IF KeyBoardIO()>-1 THEN END

//seconds hand
STARTPOLY 0
//DRAWLINE cx,cy,cx+200*COS(secs*6-90),cy+200*SIN(secs*6-90),RGB(RND(200)+20,RND(200)+20,RND(200)+20) //secs
POLYVECTOR cx+200*COS(secs*6-90),cy+200*SIN(secs*6-90),cx+200*COS(secs*6-90),cy+200*SIN(secs*6-90),RGB(255,255,fx1)
POLYVECTOR cx+10*COS(secs*6-180),cy+10*SIN(secs*6-180),cx+10*COS(secs*6-180),cy+10*SIN(secs*6-180),RGB(1,1,1)
POLYVECTOR cx+10*COS(secs*6),cy+10*SIN(secs*6),cx+10*COS(secs*6),cy+10*SIN(secs*6),RGB(1,1,1)
ENDPOLY

//minutes hand
STARTPOLY 0
//DRAWLINE cx,cy,cx+166*COS(mins*6-90),cy+166*SIN(mins*6-90),RGB(RND(200)+20,0,0)//mins
POLYVECTOR cx+150*COS(mins*6-90),cy+150*SIN(mins*6-90),cx+200*COS(mins*6-90),cy+200*SIN(mins*6-90),RGB(255,255,fx1)
POLYVECTOR cx+10*COS(mins*6-180),cy+10*SIN(mins*6-180),cx+10*COS(mins*6-180),cy+10*SIN(mins*6-180),RGB(1,1,1)
POLYVECTOR cx+10*COS(mins*6),cy+10*SIN(mins*6),cx+10*COS(mins*6),cy+10*SIN(mins*6),RGB(1,1,1)
ENDPOLY

// hours hand
STARTPOLY 0
//DRAWLINE cx,cy,cx+122*COS(hrs*30-90),cy+122*SIN(hrs*30-90),RGB(0,0,RND(200)+20) //hours
POLYVECTOR cx+100*COS(hrs*30-90),cy+100*SIN(hrs*30-90),cx+200*COS(hrs*30-90),cy+200*SIN(hrs*30-90),RGB(255,255,fx1)
POLYVECTOR cx+10*COS(hrs*30-180),cy+10*SIN(hrs*30-180),cx+10*COS(hrs*30-180),cy+10*SIN(hrs*30-180),RGB(1,1,1)
POLYVECTOR cx+10*COS(hrs*30),cy+10*SIN(hrs*30),cx+10*COS(hrs*30),cy+10*SIN(hrs*30),RGB(1,1,1)
ENDPOLY


DRAWDISC(RGB(1,1,1),RGB(255,255,fx1),cx,cy,22)
DRAWCIRCLE(RGB(1,1,1),cx,cy,22)


FOR i= 1 TO 12 //draw little lines and numbers
DRAWLINE cx+200*COS(i*30),cy+200*SIN(i*30),cx+210*COS(i*30),cy+210*SIN(i*30),RGB(1,fx1,1)
PRINT i,cx+225*COS(i*30-90)-8,cy+225*SIN(i*30-90)-h/2-2
NEXT

secs1=convert(ASC(MID$(PLATFORMINFO$("TIME"),18,1)))
secs2=convert(ASC(MID$(PLATFORMINFO$("TIME"),17,1)))
mins1=convert(ASC(MID$(PLATFORMINFO$("TIME"),15,1)))
mins2=convert(ASC(MID$(PLATFORMINFO$("TIME"),14,1)))
hrs1= convert(ASC(MID$(PLATFORMINFO$("TIME"),12,1)))
hrs2= convert(ASC(MID$(PLATFORMINFO$("TIME"),11,1)))
secs=secs2*10
secs=secs+secs1
mins=mins2*10
mins=mins+mins1
hrs=hrs2*10
hrs=hrs+hrs1
IF hrs=0 THEN hrs=12
  IF hrs>12;
  hrs=hrs-12; pm$="pm"
  ELSE
pm$="am"
ENDIF
PRINT MID$(PLATFORMINFO$("TIME"),0,10),2,2+fx1

IF mins<10
PRINT hrs+":0"+mins+" "+pm$,20,25+fx1
ELSE
PRINT hrs+":"+mins+" "+pm$,20,25+fx1
ENDIF

SHOWSCREEN
WEND


FUNCTION DRAWRING: Col1,Col2,CircleX,CircleY,OutsideRadius,InsideRadius

FOR Cir=0 TO 359 STEP 10
STARTPOLY 0
CirX1=CircleX+OutsideRadius*COS(Cir)
CirY1=CircleY+OutsideRadius*SIN(Cir)
CirX2=CircleX+OutsideRadius*COS(Cir-10)
CirY2=CircleY+OutsideRadius*SIN(Cir-10)
CirX3=CircleX+InsideRadius*COS(Cir-10)
CirY3=CircleY+InsideRadius*SIN(Cir-10)
CirX4=CircleX+InsideRadius*COS(Cir)
CirY4=CircleY+InsideRadius*SIN(Cir)
POLYVECTOR CirX1,CirY1,CirX1,CirY1,Col2
POLYVECTOR CirX2,CirY2,CirX2,CirY2,Col2
POLYVECTOR CirX3,CirY3,CirX3,CirY3,Col1
POLYVECTOR CirX4,CirY4,CirX4,CirY4,Col1
ENDPOLY
NEXT

ENDFUNCTION

FUNCTION sxf: Col1,Col2,CircleX,CircleY,OutsideRadius,InsideRadius
//strange effects
STATIC sf
FOR Cir=0 TO 359 STEP 20
STARTPOLY 0
sf=sf+1
Cir=Cir+sf
CirX1=CircleX+OutsideRadius*COS(Cir)
CirY1=CircleY+OutsideRadius*SIN(Cir)
CirX2=CircleX+OutsideRadius*COS(Cir-10)
CirY2=CircleY+OutsideRadius*SIN(Cir-10)
CirX3=CircleX+InsideRadius*COS(Cir-10)
CirY3=CircleY+InsideRadius*SIN(Cir-10)
CirX4=CircleX+InsideRadius*COS(Cir)
CirY4=CircleY+InsideRadius*SIN(Cir)
POLYVECTOR CirX1,CirY1,CirX1,CirY1,Col2
POLYVECTOR CirX2,CirY2,CirX2,CirY2,Col2
POLYVECTOR CirX3,CirY3,CirX3,CirY3,Col1
POLYVECTOR CirX4,CirY4,CirX4,CirY4,Col1
ENDPOLY
NEXT
FOR Cir=359 TO 0 STEP 20
STARTPOLY 0
sf=sf-1
Cir=Cir+sf+90
CirX1=CircleX+OutsideRadius*COS(Cir)
CirY1=CircleY+OutsideRadius*SIN(Cir)
CirX2=CircleX+OutsideRadius*COS(Cir-10)
CirY2=CircleY+OutsideRadius*SIN(Cir-10)
CirX3=CircleX+InsideRadius*COS(Cir-10)
CirY3=CircleY+InsideRadius*SIN(Cir-10)
CirX4=CircleX+InsideRadius*COS(Cir)
CirY4=CircleY+InsideRadius*SIN(Cir)
POLYVECTOR CirX1,CirY1,CirX1,CirY1,Col2
POLYVECTOR CirX2,CirY2,CirX2,CirY2,Col2
POLYVECTOR CirX3,CirY3,CirX3,CirY3,Col1
POLYVECTOR CirX4,CirY4,CirX4,CirY4,Col1
ENDPOLY
NEXT
IF sf>360 THEN sf=0
ENDFUNCTION


FUNCTION DRAWDISC: CircleColor1,CircleColor2,CircleX,CircleY,CircleRadius
FOR Cir=0 TO 359 STEP 10
STARTPOLY 0
CirXS=CircleX+CircleRadius*COS(Cir)
CirYS=CircleY+CircleRadius*SIN(Cir)
CirXE=CircleX+CircleRadius*COS(Cir-10)
CirYE=CircleY+CircleRadius*SIN(Cir-10)
CirXO=CircleX
CirYO=CircleY
POLYVECTOR CirXS,CirYS,CirXS,CirYS,CircleColor1
POLYVECTOR CirXE,CirYE,CirXE,CirYE,CircleColor1
POLYVECTOR CirXO,CirYO,CirXO,CirYO,CircleColor2
ENDPOLY
NEXT
ENDFUNCTION

FUNCTION DRAWCIRCLE: CircleColor,CircleX,CircleY,CircleRadius
//draws a 36 point circle
LOCAL Cir,CirXS,CirYS,CirXE,CirYE
FOR Cir=0 TO 359 STEP 10
CirXS=CircleX+CircleRadius*COS(Cir)
CirYS=CircleY+CircleRadius*SIN(Cir)
CirXE=CircleX+CircleRadius*COS(Cir-10)
CirYE=CircleY+CircleRadius*SIN(Cir-10)
DRAWLINE CirXS,CirYS,CirXE,CirYE,CircleColor
NEXT
ENDFUNCTION

// ------------------------------------------------------------- //
// ---  convert ascii to numerals  ---
// ------------------------------------------------------------- //
FUNCTION convert: num
IF num=48 THEN RETURN 0
IF num=49 THEN RETURN 1
IF num=50 THEN RETURN 2
IF num=51 THEN RETURN 3
IF num=52 THEN RETURN 4
IF num=53 THEN RETURN 5
IF num=54 THEN RETURN 6
IF num=55 THEN RETURN 7
IF num=56 THEN RETURN 8
IF num=57 THEN RETURN 9
RETURN -1
ENDFUNCTION // CHECKASC

// ------------------------------------------------------------- //
// ---  KeyBoardIO  --- detect any key press...
// returns instance of key pressed..one time...great for buttons
// waits till button is released...then returns that keycode.
// ------------------------------------------------------------- //
FUNCTION KeyBoardIO:
LOCAL i
STATIC INIT_KEYBOARD,K,SENDKWAIT,SKB
IF INIT_KEYBOARD=FALSE
INIT_KEYBOARD=TRUE
ENDIF
K=-1
FOR i=0 TO 299
IF KEY(i) THEN K=i
NEXT
IF (K=-1) AND (SENDKWAIT=TRUE); SENDKWAIT=FALSE; RETURN SKB; ENDIF
IF K>-1; SENDKWAIT=TRUE; SKB=K; K=-1; ENDIF
RETURN K
ENDFUNCTION // KEYBOARDXX


FUNCTION drawwater:
STATIC z1,z2
FOR y = 0 TO 600 STEP 60
FOR x= 0 TO 800 STEP 80
y1=y-3
STARTPOLY 1
POLYVECTOR x+RND(3)-3,y1+RND(3),x+RND(3)-3,y1+RND(3),RGB(RND(99),x/9+y/9,x/9+y/9)
POLYVECTOR x+RND(3)-3,y1+60+RND(3)+3,x+RND(3)-3,y1+60+RND(3)+3,RGB(RND(99),x/9+y/9,x/7+y/9)
POLYVECTOR x+80+RND(3)+3,y1+60+RND(3)+3,x+80+RND(3)+3,y1+60+RND(3)+3,RGB(RND(99),x/9+y/9,x/9+y/7)
POLYVECTOR x+80+RND(3)+3,y1+RND(3)-3,x+80+RND(3)+3,y1+RND(3)-3,RGB(RND(99),x/9+y/9,x/9+y/9)
ENDPOLY
NEXT
NEXT
ENDFUNCTION










Gracias a todos de antemano, y un saludo.

mentalthink

Hola Syntax_Error lo primero bien bienvenido al foro.

Bien primero te comento un poco más o menos mi experiencia con GLBasic, si no tienes conocimeintos de programación, NI TE PREOCUPES!!! (ojo no te estoy chillando), ya verás como tocandolo un poco en menos de 1 mes ya te salén cosas, es realmente sencillo, rápido y potente.

Bien sobre tu "problema", haz lo siguiente:

1-En el menu superior, en donde aparece Fie, EDit, View, Project, etc.. , pulsa sobre Project.

2.Ahora en Project ves a Options, donde sale un Icono similar a una Hoja con un simbolo de verificación Rojo.

3.En este Pop-Up que te ha salido que son las Opciones de los Projectos , tienes que DES-verificar la casilla que dice "Explicit Declarations."

4. Simplemente Pulsa F5, y te saldrá la compilación del código, o sea el producto de esas líneas de código.

Te explico un poco porque pasa estó, por Defecto GLBasic obliga desde hace un par de versiones, a declarar todas la variables que pongas en tú codigo:

Por ejemplo si hago la variable:

movimiento_X,

si pones solo esta línea de código, sino haces los pasos que te he comentado antes te dará error.

Por lo cual debería ser asi:

GLOBAL movimiento_X  (Esto es una variable accesible desde cualquier parte del código)
o
LOCAL   movimiento_X  (Y esta es local y solo se puede utilizar en partes del código conde la has declarado, por ejemplo dentro de una Función).

Solo es estó.

PS: IMPORTANTE!!!, para hacer pruebas y generar el código más rápido es bastante útil desverificar la casilla, pero cuando hagas algo que conlleve algo de código (más espeso), es mejor verificar la casilla y declarar todas la variables.  Porque?¿, porque si escribes mal una variable, aunque sea solo por una letra mayúscula el Compilador te avisará, y verás que resolver un problema en el código, te conllevará muy poco rato, si está SIN Verificar, no te avisará y a lo mejor el programa no hace lo que quieres

Ejemplo:

salta_X la : cual por ejemplo tiene un valor 10

y escribes

salta_x  (la x es minúscula)

esta tendrá el valor 0, y no hará lo que quieres hacer, y como no te avisa el compilador porque has DES-verificadoa la casilla "EXplicit Declarations", quizás te vuelvas algo "majarón" hasta que lo encuentras esté error.

Un saludo, y como te comento bienvenido.

Iván J.


Sintax error

Hola mentalthink,

Gracias por tu respuesta ( Rapidísima  :) ), he desactivado la casilla que comentas, y ahora si funciona el código en cuestión ( que por cierto, menudo curro que se pego el tal " Hemlos " en este código ).
Es muy de agradecer este tipo de ayuda, ya me estaba volviendo un poco tarumba, no sabia ya que hacer, en tiempos pasados con el MSX basic, Amiga basic etc, etc, no había esos problemas, al menos con los editores de Basic estándares.
Y si, tienes razón en lo de activar la casilla en el futuro y declarar todas las variables convenientemente, así se evitaran los posibles errores.

Mil gracias, SalU2.

Lisardo R.

mentalthink

Hola Sintax Error, de nada para eso estamos en el foro, ya sabes cualquier cosa que te pueda ayudar por aquí ando, sino hay gente con muchísimos más conocimientos que yo en programación.

Sobre lo que comentas del MSX y el Amiga, ya verás como te sirve, yo personalmente le cojí el tranquillo por el tema de que hacía algunas cosillas con los CPC.




pinete

joe Mentalthink, eres el mejor! peazo explicacion!  :nw:
saludetes!

mentalthink

 :enc: :enc: :enc: :enc:

pero no soy el mejor ni de lejos, gracias pinete.