Conceptos del videojuego y primeros pasos con Pygame
Introducción
Este capítulo pretende presentar diferentes conceptos relacionados con Pygame y empezar a explicar cómo Pygame proporciona soluciones prácticas en relación a estos conceptos. En particular, necesitamos explicar qué es un bucle de juego y posteriormente introducir el concepto de gestión de colisiones, un aspecto particularmente tedioso de manejar sin Pygame. Tomaremos como ejemplo un juego cuya gestión de colisiones se lleva a cabo sin Pygame. Esto nos permitirá demostrar lo práctico que es Pygame para manejar este aspecto, tan fundamental en el desarrollo de videojuegos.
El bucle del juego
Antes de continuar, debemos definir una noción fundamental del desarrollo de videojuegos: el bucle del juego. Algunas veces se llama "bucle de animación", se encuentra en (casi) todos los videojuegos y, como tal, es una especie de columna vertebral.
Se corresponde con un bucle infinito. Obviamente, tiene que poder interrumpirlo. Para hacer esto, programamos una acción del usuario (por ejemplo, presionando la tecla [Esc] del teclado). Al presionar esta tecla se interrumpe el bucle infinito y, por lo tanto, el juego actual.
Por lo tanto, ¿qué hace este bucle en cada iteración? Más o menos, los siguientes pasos:
1. Comprobar si se cumplen las condiciones de parada y, si es el caso, interrumpir el bucle.
2. Actualizar los recursos necesarios para la iteración actual.
3. Obtener las entradas procedentes del sistema o de la interacción con el jugador.
4. Actualizar todas las entidades que caracterizan el juego.
5. Actualizar la pantalla.
Al final de una iteración, el bucle infinito continúa y pasamos a la siguiente iteración.
De manera ideal, cada iteración debería tener la misma duración que todas las demás para permitir una cierta fluidez en el desarrollo del juego. Como veremos más adelante, una de las ventajas de Pygame es que también ofrece herramientas de gestión del tiempo. A título informativo, solemos trabajar...
Descripción general de Pygame
Esta sección está aquí principalmente para contextualizar Pygame y explicar cómo se ha diseñado este framework, por qué y en qué contextos.
Pygame es una librería de software, es decir, un conjunto de recursos de software, dedicada al desarrollo de videojuegos en tiempo real. Esta librería también tiene la característica y el gran interés de ser software libre, en la medida en que se distribuye bajo la licencia GNU LGPL.
Lo que se debe entender es que, para hacer un juego es necesario que los elementos de código interactúen con partes de "bajo nivel" del ordenador, es decir, con el hardware, ya sea la pantalla, la tarjeta de sonido, el teclado, el ratón o incluso otros periféricos dedicados al juego. Estas interacciones de "bajo nivel" son complejas, generalmente desarrolladas con lenguajes como C, y utilizan la librería SDL (Simple DirectMedia Layer), que no siempre es fácil de aprender.
La librería Pygame es una capa que se sitúa por encima de SDL y que simplifica el acceso y la manipulación de estos diferentes dispositivos de forma sencilla e intuitiva, mientras se desarrolla con el lenguaje Python.
Pygame ofrece módulos que simplifican todos los aspectos del juego: incluyendo gráficos, sonido, interacciones de ratón o teclado y gestión...
Instalación de Pygame
La forma más sencilla de instalar Pygame es usar el programa pip. Por lo tanto, la siguiente línea de comandos le permite agregar la última versión de Pygame.
---------------------------------------------------------------------------------------
pip install pygame
---------------------------------------------------------------------------------------
Una vez instalada, puede verificar inmediatamente la versión de Pygame con el siguiente comando, ejecutado en un entorno Python:
import pygame
---------------------------------------------------------------------------------------
Obtenemos:
> pygame 2.1.2 (SDL 2.0.18, Python 3.8.8)
También es posible instalar Pygame con programas que incluyen muchas otras herramientas, como Anaconda, por ejemplo.
En el momento de escribir este artículo, la versión de Pygame (como se ha indicado anteriormente) es la versión 2.1.2, que incluye la versión 2.0.18 de SDL.
Puede ser interesante empezar visitando la web oficial del proyecto Pygame (https://www.pygame.org), por un lado para descubrir los diferentes recursos que podrán serle útiles más adelante y para comprobar el número de versión más reciente. Además, el sitio web oficial ofrece varias alternativas de instalación dependiendo de su sistema operativo.
Tanto si está en Windows, Linux o macOS, instalar Pygame es extremadamente...
Los módulos que componen Pygame
En esta sección se enumeran los diferentes módulos que componen Pygame, lo que da una primera visión general de las posibilidades. Con solo cuatro o cinco de estos módulos (o clases) que en general se utilizan con mayor frecuencia (event, image, draw, surface, time y después sprite), es posible hacer videojuegos avanzados.
-
cdrom: gestión de unidades de CD/DVD.
-
cursors: gestión del cursor del ratón.
-
display: configuración de la superficie de visualización.
-
draw: diseño de formas poligonales.
-
event: manejo de eventos gráficos o relacionados con los periféricos.
-
font: gestión de fuentes.
-
image: gestión de imágenes.
-
joystick: gestión de periféricos de juego.
-
key: gestión del teclado.
-
mixer: gestión general del sonido.
-
mouse: gestión del ratón.
-
movie: gestión de aspectos de vídeo.
-
music: gestión de la música.
-
overlay: gestión avanzada del vídeo.
-
pygame: gestión de la propia librería de Pygame.
-
rect: gestión específica de la forma rectangular.
-
sndarray: gestión de datos de sonido.
-
sprite: gestión de los sprites, objetos de alto nivel utilizados en Pygame.
-
surface: gestión avanzada de imágenes.
-
surfarray: gestión y manipulación de imágenes.
-
time: gestión del tiempo y refresco...
Realización de un primer juego gráfico: cohete y planetas
La idea aquí es hacer un pequeño juego cuyo objetivo es pilotar una máquina voladora y evitar ciertos obstáculos: planetas, dos en este caso, cayendo del cielo. El cohete debe evitarlos yendo a la izquierda o a la derecha. Esta será la acción del jugador: mover a la izquierda o a la derecha (solo lateralmente) el cohete, para evitar los planetas. Si un planeta toca el cohete, obviamente se pierde.
Para ello, escribiremos un pequeño código en Pygame detallando lo máximo posible cada etapa.
El código tiene un archivo requirements.txt que permite crear y activar un entorno virtual. Aquí, solo hay un módulo, en este caso Pygame.
Uno de los intereses de este enfoque es explicar e ilustrar simplemente dos aspectos principales del desarrollo de Pygame, a saber:
-
el sistema de coordenadas en una ventana de Pygame,
-
la gestión de colisiones, es decir, el código que gestiona el encuentro de dos objetos gráficos (por ejemplo, si queremos simular gráficamente el rebote de una pelota en el suelo).
El resto del libro detalla precisamente cada aspecto abordado. Pero este primer desarrollo ofrece una visión global de lo que es Pygame y lo que permite hacer.
1. Las imágenes utilizadas
La máquina voladora se define mediante una imagen en formato JPEG o PNG. Puede utilizar una de sus fotografías o una de sus creaciones gráficas realizadas con software de dibujo o una imagen que se encuentre en la Web, siempre que tenga una licencia que permita reutilizarla libremente y posiblemente sin necesidad de atribución. Este es el caso de la imagen del cohete que utilizamos en este ejemplo. Se almacena en el directorio del proyecto con el nombre COHETE.png. El vehículo volador tiene una orientación vertical, para el desplazamiento automático del juego hacia arriba. Para terminar, es preferible que la imagen elegida tenga un fondo transparente.
La imagen del planeta que el cohete debe evitar se almacena con el nombre PLANETA.png.
|
|
2. La ventana del juego
Crear la ventana del juego es el primer paso. Esta es la ventana que aloja los elementos gráficos que componen el juego.
Como era de prever, empezamos importando Pygame:
import pygame
Seguidamente, inicializamos Pygame:
pygame.init()
Las dos líneas anteriores están sistemáticamente...