23 de febrero de 2010

Montando el esqueleto del juego...

Bien, he iniciado un nuevo proyecto con GLBasic; he decidido que voy a empezar montar la estructura del juego y hacer los test iniciales con tiles sencillos. Una vez esté el proyecto más elaborado ya me entretendré a diseñar los gráficos necesarios.



Voy a dividir el código fuente en varios ficheros para poder separar cada cosa en su sitio. Hay un fichero principal que es Main.gbas, que es el que contiene un bucle principal que se repite constantemente hasta que no se cierra la ventana del juego. Desde este fichero declaro las variables globales que necesitaré para todo el juego.

//Main.gbas

1:  GLOBAL ModoMaquina  
2:  GLOBAL BuclePrincipalMaquina  
3:  GLOBAL FuenteSistema$=GETCURRENTDIR$()+"data/typo/Terminal_Default_Font_6x8.png"  
4:    
5:  IniciaMaquina()  
6:  IniciaVariablesMaquina()  
7:    
8:  WHILE BuclePrincipalMaquina=TRUE  
9:    Render(ModoMaquina)  
10: WEND  

Consultando las funciones e instrucciones del lenguaje GLBasic, se observa que el código es muy sencillo de interpretar. Primero declaro las variables globales ModoMaquina, BuclePrincipalMaquina y FuenteSistema$, que se encargarán respectivamente de:

-Controlar el modo o status del juego en cada momento.
-Repetir el bucle hasta que su valor sea FALSE.
-Almacenar la ubicación en disco de la fuente tipográfica de prueba que voy a emplear.

Las líneas 5 y 6 se encargan de preparar el entorno de la aplicación y las variables mínimas necesarias. Las funciones a las que llama están en los ficheros Sistema.gbas y Variables.gbas. Finalmente, el bucle.

1:  //Sistema.gbas  
2:    
3:  FUNCTION IniciaMaquina:  
4:    
5:    SETSCREEN 320,240,0  
6:    BLACKSCREEN  
7:    SYSTEMPOINTER TRUE  
8:    SETTRANSPARENCY RGB(255,0,255)  
9:    LOADFONT FuenteSistema$,0  
10:   SETFONT 0  
11:    
12: ENDFUNCTION    

Fichero Sistema.gbas: Declarar la resolución de pantalla; pintar todo el buffer de video a negro; activar el cursor del ratón para que sea visible; definir como color transparente R255 G0 B255 (magenta), cargar una fuente de sistema para sustituir el horrible set de letras que viene por defecto.

1:  //Variables.gbas  
2:    
3:  FUNCTION IniciaVariablesMaquina:  
4:    
5:    ModoMaquina=0 //Menu_Principal  
6:    BuclePrincipalMaquina=TRUE  
7:    
8:  ENDFUNCTION  

Fichero Variables.gbas: Declaramos dos variables (de momento), el modo de trabajo de nuestra "máquina" y después activamos nuestro bucle dándole como valor TRUE a BuclePrincipalMaquina, así si en cualquier parte del código del programa, cambiamos su contenido a FALSE, se saldría del bucle y por tanto fin de la aplicación.

Finalmente, en la línea 9 de Main.gbas se hace una llamada a la Función Render (que está descrita en Render.gbas) que pintará en pantalla lo que deseemos, en función del valor de Modo_Maquina, tal como se muestra en el código fuente en las líneas 5 y 6.

1:  // Render.gbas  
2:  FUNCTION Render: ModoMaquina  
3:    
4:    IF ModoMaquina=0 //Menu_Principal  
5:      PRINT "Modo Maquina: "+ModoMaquina,2,12  
6:      PRINT "Hola Mundo!",2,32  
7:    ENDIF  
8:    
9:    DibujaFPS()  
10:   SHOWSCREEN  
11:  ENDFUNCTION  
12:    
13:  FUNCTION DibujaFPS:  
14:    
15:    dtime = GETTIMER()  
16:     fps = ((1000/dtime)+fps)/2  
17:     delay = delay+dtime  
18:    
19:     IF delay>Reloj  
20:       delay = 0  
21:       showfps = fps  
22:     ENDIF  
23:    
24:    PRINT "FPS: "+INTEGER(showfps),2,2  
25:    
26:  ENDFUNCTION  

Incluyo también una función de contador FPS (Fotogramas Por Segundo), muy útil para saber en todo momento el rendimiento del juego con respecto a la potencia del hardware donde se ejecute el programa.



Y bien, ya tengo un entorno sencillo montado con GLBasic, que aunque simple ya tiene algunas cosas interesantes como una fuente propia, la ventana definida en ancho y alto y un bucle principal que controlará en todo momento qué hacer. Próximamente añadiré las funciones de control al teclado y al ratón dentro del bucle principal.

(Para mejor comprensión del lenguaje de GLBasic recomiendo un paseo por su foro ó descargar e instalar el Kit de desarrollo y consultar los ficheros de ayuda que incorpora).

No hay comentarios: