Python Game Library

Pygame
Información sobre la plantilla
Parte de la familia Bibliotecas de terceros de Python
Pygame logo bot.gif
Última versión estable1.9.1
GéneroVideojuegos 2D
Sistemas Operativos compatiblesWindows, Linux, UNIX, MacOS, etc.
Idiomaingles, español, ruso, etc.
LicenciaGNU/GPL
Sitio web
Sitio oficial de Pygame

Pygame (Python Game Library). Librería multiplataforma sobre SDL para Python para la implementacion de juegos y aplicaciones de multimedios en 2 dimensiones.

Con sus clases y módulos brinda soporte al desarrollador para importar, tratar y exportar imágenes en varios formatos, IGC y formas básicos, efectos de sonido, reproducción de audio de fondo y CDs, reproducción de video MPEG, tratamiento de eventos de ratón, joystick, teclado, tiempo y otras facilidades que permite rápidez y efectividad para el programador, especialmente si se trata de grupos o empresas pequeños, así como la garantía de soporte para varios sistemas operativos, sin cambios en el código fuente o en la versión compilada para la Máquina virtual de Python.

Pygame: Python + SDL

Extensiones para Python

Python es un lenguaje que viene con un amplio grupo de módulos o librerías en las distribuciones estándares, las cuales a su vez se han ido desarrollando tanto por sí mismas como adecuándose a la evolución del lenguaje. Este grupo de librerías "estándares" brindan soluciones a aspectos generales de aplicación, por lo general bajo el concepto de portabilidad sin cambios en el código fuente. Sin embargo, no pueden abarcar todo el espectro de problemas que pudieran aparecer o garantizar la totalidad de integración con otras aplicaciones o plataformas de desarrollo que existen o van apareciendo. Es por ello que otros grupos desarrollan módulos para el soporte de nuevas funcionalidades o para integrar otras tecnologías al lenguaje.

Hay que recordar que este lenguaje es de propósito general. Desde su creación en 1991, por Guido von Rossum, ha ido ganando constantemente aplicabilidad y por tanto, personas o grupos que producen librerías alternativas han ido generalizando sus soluciones hasta obtener robustos módulos que permiten a los desarrolladores soluciones ya predigeridas a las cuales solo hay que adaptar a una nueva situación particular.

Uno de esos terrenos es el procesamiento de imágenes 2D, donde para Python existe PIL (Python Imaging Library) que es independiente de plataforma y se usa tanto por particulares, centros universitarios y de investigación, como por ejemplo en una de las extensiones de Gimp, pero no es la única y la programación de juegos y multimedias donde destaca en el caso de aquellos que se hacen de forma plana la librería Pygame.

Interfaz de SDL

SDL es una librería GNU hecha para el tratamiento de gráficos y contenido multimedia, así como el control de dispositivos como video, teclado, mouse, unidad de CD/DVD, temporizador de la máquina, joystick, etc. Está fundamentalmente orientada a la implementación de juegos sencillos en 2D.

SDL es soportada sobre varias arquitecturas de hardware y varios SO, con una interfaz general hecha en C y algunas veces en ensamblador, por lo que normalmente una aplicación escrita para usar SDL encontrará muchos lugares para correr sin cambios en su código fuente.

En el caso de Pygame, éste le debe casi toda su funcionabilidad y características a SDL, eso sí con una serie de “pythonizaciones” que lo llevan a la altura de un lenguaje de alto nivel como lo es Python: clases, librerías modulares, manipulación de excepciones, documentación contextual, entre otras cosas.

La librería Pygame

Pygame es una librería de Python del tipo extensión, por lo que su versión se vuelca una vez recompilado sus componentes al directorio "site-packages" dentro de libs. Como parcticamente todas las librerías compuestas Python tiene una principal nombrada __init__.py a partir de la cual se vinculan las librerías de soporte de SDL y las propias.

Para el desarrollador el módulo se importa bajo el nombre pygame, a partir del cual se vinculan el resto de los módulos, tipos, constantes, clases y funciones.

En estos momentos se trabaja en las versiones de prueba de la 2.0, mientras la que está operativa es la 1.9.

Características

Pygame permite a los desarrolladores de Python:

  • La generación de ventanas gráficas o de pantalla completa con varios tamaños, modos y densidades.
  • Tratar la aplicación Pygame como una apliación de ventanas, donde en un ciclo central se manipula los eventos generados y se actualiza la interfaz gráfica.
  • Manipulación y generación de eventos de dispositivos y recursos de la máquina: tarjeta gráfica, teclado, mouse, temporizador, etc.
  • La importación, tratamiento y exportación de imágenes desde y hacia ficheros de imagen de formatos conocidos como JPEG, PNG, GIF, TGA, BMP, entre otros, contando el con un tipo propio englobado en la clase Surface. Esto implica algunos efectos de postprocesado (brillo, recoloración, transparencia, máscaras, ect), la deformación (rotación, ampliación y estrechamiento, volteo, entre otras), la obtención de partes de la superficie.
  • Generación de formas, lineas y puntos básicos.
  • La emisión de sonidos de efecto en ficheros OGG y WAV.
  • La reproducción de música de fondo con archivos OGG, MP3 y MIDI.
  • Reproducir videos MPEG1.
  • Sprites y control de colisiones.

También debe saberse que la estructura de programa que se sugiere para el trabajo con Pygame es el mismo que con otras de tipo ventana gráfica:

  1. Inicialización de las características de Pygame y obtención de un objeto ventana o pantalla completa.
  2. Preparación de objetos y condiciones para el procesamiento principal.
  3. Bucle de control (normalmente infinito).
    1. Manipulación de los eventos generados (normalmente con otro ciclo, porque los eventos normalmente se ponen en una secuencia tipo pila).
    2. Redibujo de los elementos gráficos, el objeto ventana incluido.
    3. Cambio de la vista actual por la que contiene el objeto ventana actualizado.
    4. Otras actualizaciones para próxima vuelta del bucle principal.
  4. Preparaciones para el cierre de la aplicación.

Estas es solo una propuesta básica, por supuesto que la estructura puede variarse según las necesidades del desarrollador.

Módulos principales de Pygame

Python Game Library tiene una serie de módulos bien definidos dentro del directorio "pygame" en "site-packages". Varios de hechos han sido volcados directamente al módulo raíz "__init__.py" con alias "pygame". Veamos los fundamentales:

  • pygame: Contiene el sistema de inicialización de los componentes de la librería, así como información sobre la versión de SDL y Pygame. También abstrae principalmente definiciones de constantes y clases de submódulos para hacer más simple el trabajo del programador.
  • cd: Librería para el control de CD/DVD.
  • cursors: Soporte para la creación y tratamiento de nuevos cursores creados por el usuario.
  • display: Esta librería engloba las funcionalidades para el trabajo con ventanas gráficas o distintos modos de video a pantalla completa, ambos tratables como objetos Surface.
  • draw: Los métodos de draw permiten el trazo de líneas y figuras dentro de objetos Surface.
  • event: Módulo que permite el tratamiento de eventos y generación de nuevos eventos hechos por el usuario. Es la base para el tratamiento de los dispositivos de entrada como ratón, teclado, joystick, etc.
  • font: Manipulación y dibujo de textos formateados a partir de archivos de fuente TrueType y otras.
  • image: Contiene funcionalidades para la adquisición de instancias Surface a partir de archivos de imagen o cadenas formateadas, también se implementan macanismos de salva o reconversión de formatos de archivos de imagen y cadenas.
  • joystick: Control del dispositivo universal de juegos.
  • key: Procesamiento y control del teclado.
  • mask: Tratamiento de máscaras. De utilidad para saber con exactitud la coincidencia de dos o más elementos gráficos.
  • midi: Control de E/S de dispositivos MIDI.
  • mixer: Tratamiento de efectos de sonido, fundamentalmente asociados a acciones de los dispositivos de entrada o sonidos de error. Actualmente soporta "WAV" sin comprimir y "OGG" (recomendado por compatibilidad multiplataforma).
  • mouse: Soporte para el mouse, configuración de su comportamiento y representación: el cursor.
  • movie: Solo contiene la definición de la clase Movie para la reproducción de archivos de video MPEG1. Nota: para reproducir video, deben detenerse las secuencias de audio de mixer y mixer.music.
  • music: Es un submódulo de mixer para la reproducción background de listas de archivos de música MP3 y OGG.
  • scrap: Trabajo con el clipboard.
  • sprite: Colección de funcionalidades y clases para el trabajo con sprites.
  • time: Funciones para acciones de tiempo y control del temporizador de eventos.
  • transform: Librería de métodos de transformaciones básicas sobre objetos Surface: redimensionado, rotaciones, volteos, etc.

Objetos de Pygame

pygame y sus submódulos definen una serie de clases de objetos que permiten gran libertad y comodidad al programador de la plataforma Pygame. De ellas se relacionan las siguientes:

  • Surface.
  • Rect.
  • Font y SysFont.
  • Event.
  • Color.
  • Sound.
  • Movie.
  • PixelArray.
  • La jerarquía de objetos Sprite.
  • Clock.

Clase Surface.

Es el tipo de objetos principal pues es la forma en que Pygame trata a las imágenes y a la mayoría de los elementos gráficos, incluida la propia ventana o pantalla principal.

Las imágenes pueden importarse mediante la función pygame.image.load(nombre_archivo_imagen) que obtiene automáticamente la instancia de Surface asociada, en este caso se respeta características originales del formato de imagen, como por ejemplo el soporte de transparencia. Como inconveniente tiene que será más lento. Si desea ganerse velocidad, debe convertirse a una Surface pura mediante los métodos convert() o convert_alpha() si desea mantenerse el tratamiento de transparencia.

Existe también el método fill(color) que rellena la imagen con un color entero.

Si desea el dibujo de otra superficie dentro de aquella puede usarse blit(suface, posición), donde posición es una coordenada definida por un par (x, y) a partir de donde comenzará a pintarse. blit respeta el canal de alfa (transparencia) de la instancia de Surface a superponer.

Clase Font.

El constructor del objetos pygame.font.Font(fichero_fuentes, tamaño) devuelve un objeto Font del tipo de fuente TrueType dado por el nombre del fichero según la variable fichero_fuentes, que puede ser también None para tomar la fuente por defecto de Pygame.

Luego con ese objeto pueden obtenerse instancias de Surface formadas por la graficación según la fuente en cuestión de un texto unilineal mediante el método render(texto, antialias, color) o render(texto, antialias, color, color_fondo).

Clase Rect.

La clase Rect es un refinamiento provisto por Pygame para el tratar el movimiento, toda vez que cualquier elemento gráfico Surface tiene asociado un rectangulo que lo contiene y define sus dimensiones, centro, bordes, etc.

A la hora de pintar una instancia de Surface en otra mediante blit, la posición puede ser dada también como un objeto Rect. Variando sus coordenadas progresivamente el objeto es dibujado en una nueva posición creando gracias a la persistencia retiniana la ilusión de movimiento que utiliza el cine de animación.

Clase Color.

Aunque la idea básica de Pygame para el tratamiento de color es la forma RGB en una tripla (R, V, A) o una cuádrupla (R, V, A, O), donde:

  • R: Componente roja del píxel (0 .. 255).
  • V: Componente verde (0 .. 255).
  • A: Componente azul (0 .. 255).
  • O: Opacidad (0 .. 255). 0 es transparente, 255 es totalmente opaco.

Existen otras representaciones de color como CMY, HSVA, I1I2I3, colores Web y representación de enteros RGB ó ARGB, cada una con sus ventajas y desventajas. Los objetos Color son una solución para tratar todos esos casos en un solo objeto.

El constructor toma las formas siguientes:

  • pygame.Color(nombre_color) para los nombres de color para HTML.
  • pygame.Color(entero) para las representaciones de RGB, RGBA (preferiblemente para Pygame como ARGB), visto en hexadecimal Python como 0xrrggbb, donde cada letra es una cifra hexadecimal. Si se quisiera tener informacion de opacidad y el valor de la misma sobrepasa 127 hay que hacer un pequeño truco, de lo contrario Python cambia de entero a entero largo y el número deja de ser representativo para el color.
  • pygame.Color(R, V, A) ó pygame.Color(R, V, A, O), donde las letras vienen dadas por los valores y significados vistos antes.
  • pygame.Color(tuple|list) secuencias de 3 ó 4 valores RGB ó RGBA respectivamente.

Veáse además.

Fuentes

  1. Sitio Oficial de la librería Pygame. http://www.pygame.org
  2. Sitio Oficial del lenguaje de programación Python. http://www.python.org
  3. Documentación de Pygame 1.9.1. http://www.pygame.org/docs