Estructura básica de un programa
Seguiré en este recorrido por la biblioteca PyGame a [Fernando Sansberro] y más concretamente a su documento [Hacete tu Videojuego], aunque se incluirán contenidos de otros autores cuando lo considere necesario. En todo caso, el objetivo de este conjunto de entradas es aprender lo suficiente de PyGame para que nos permita generar recursos para la intervención y la evaluación, incluyendo juegos, obviamente, pero no como finalidad principal, por interesante que éstos puedan ser.
Para empezar vamos a hacer un breve recorrido por la estructura básica de un programa PyGame, aunque decir esto sea doblemente engañoso..
- Esta estructura no se limita a PyGame, sino que es usada, en lo esencial, en toda construcción de un juego.
- Podemos trabajar en PyGame usando otras estructuras más simples.
... pero a la vez es fundamentalmente cierto: incluyendo modificaciones en función de la complejidad del proyecto, el esquema básico de la mayoría de los script Python-Pygame se ajustan a este esquema.
En ella se diferencian tres partes fundamentales:
- En la primera se inicializa PyGame y se cargan los recursos que se vayan a emplear en el programa.
- En la segunda se desarrolla un bucle infinito de juego (Game loop), que a su vez se descompone en varias fases (que describiré en su momento)
- Y en la tercera se cierra el juego, liberando todos los recursos que se hayan empleado.
Para ejemplificar esta estructura expongo a continuación el script que desarrolla [Fernando Sansberro] y que he modificado (muy levemente) para (pretendo) mejorar su comprensión. Sobre esta base realizaré las explicaciones que he considerado necesarias. Este es el [enlace al script]
# -*- coding: utf-8 -*-#-------------------------------------------------------------# Primer script. Ejemplo de game loop#Autor: Fernando Sansberro - Batovi Games.#Replica: Javier Alonso.#Proyecto : Hacete tu Videojuego#Licencia: Creative Commons. BY-NC-SA#-------------------------------------------------------------#Uno. Estructura básica de un script PyGame#--------------------------------------------------------------#Sección 1 ---------------------------------------------------#Importar e inicializar pygameimport pygamepygame.init()#Crear ventana y establecer tamañoscreen = pygame.display.set_mode((640,360))#Poner título a la ventanapygame.display.set_caption('Mi primer juego')#Superficie del fondo de pantallaimgBackground = pygame.Surface(screen.get_size())imgBackground = imgBackground.convert()imgBackground.fill((0, 0, 255))#Sección 2: Game loop----------------------------------# Inicializar las variables de control del game loop.clock = pygame.time.Clock()salir = False# Loop principal (game loop) del juego.while not salir:clock.tick(60) # Timer que controla el frame rate.# Procesar los eventos que llegan a la aplicación.for event in pygame.event.get():# Si se cierra la ventana se sale del programa.if event.type == pygame.QUIT:salir = True# Si se pulsa la tecla [Esc] se sale del programa.if event.type == pygame.KEYUP:if event.key == pygame.K_ESCAPE:salir = True# Actualizar la pantalla.screen.blit(imgBackground, (0, 0))pygame.display.flip()#Sección 3: Cerrar--------------------------------------------# Cerrar Pygame y liberar los recursos que pidió el programa.pygame.quit()
Dejando a parte (no por innecesarias, que no lo son) las primeras líneas en las que se explica el script, iniciamos éste con su primera parte o fase de inicialización, que en este caso se concreta como sigue:
import pygame
pygame.init()
Instrucciones fundamentales para el funcionamiento del script y que deben figurar (de este modo o con las modificaciones que deriven de las preferencias del usuario) en todo programa PyGame.
Otros autores inicializan PyGame como from pygame import * haciendo innecesario llamar a pygame en las instrucciones que en nuestro ejemplo sí es requerido (vg. pygame.init() -> init()). Aquí te dejo [acceso a un script] reducido en el que al emplear la fórmula from pygame import * no es necesario llamar a pygame en cada instrucción o función.
El resto del código requiere su propia explicación, cosa que haré en entradas sucesivas, para centrarme en ésta en la exposición de la organización general del código.
El script se inicia con lo que llamo sección 1 y que contiene, además de la carga de la biblioteca y la inicialización de Pygame, la creación de la ventana y otros contenidos relacionados con ella. En su momento veremos que cuando el script es complejo, en esta sección también se incluye la declaración de constantes y variables.
Curiosamente la segunda parte, la más característica y definitoria de un juego, el game loop, no es obligatoria cuando el uso que vamos a dar a esta biblioteca no es para crear un juego, pero esta situación es excepcional. En la inmensa mayoría de las aplicaciones reales de PyGame es obligado crear un bucle infinito (game loop), que se estructura a su vez en al menos tres partes. Ahora sólo las nombro, ya que en una entrada posterior las explicaré con detalle. Estas partes son:
- La captura de eventos
- El dibujo de elementos en la pantalla (formas, imágenes, textos...)
- Y la actualización de la pantalla.
Para finalizar, una vez que se cierra el game loop, es conveniente salir del juego cerrando el acceso a los recursos que se emplearon para generarlo. De esto se encarga la tercera y última sección del juego, generalmente haciendo uso de la función pygame.exit() o simplemente exit(), según el modo en que se accedió (cargó) la biblioteca PyGame, como ya expliqué antes.
No hay comentarios:
Publicar un comentario
Comenta esta entrada