La participación en la Global Game Jam 2010 me ayudó a mejorar mi conocimiento de Pygame, una librería multimedia orientada al desarrollo de videojuegos con Python. En esta guía rápida -en la que sólo cubriré temas básicos y generales-, voy a suponer que el lector está familiarizado con la sintaxis de Python, y si no, lean un tutorial rápido antes de aprender Pygame!

Manos a la obra

Inicializar Pygame y módulos necesarios:

import pygame #carga el modulo de pygame
from pygame.locals import * #para que funcione QUIT
pygame.init()  #inicializa pygame
pygame.mixer.init(44100,-16,2,1024) #inicializa el sonido

Crear una ventana:

pantalla = pygame.display.set_mode((ANCHO,ALTO),FLAGS,CANT_PROFUNDIDAD_BITS) #leer mas abajo
pygame.display.set_caption("Tutorial Rapido") #titulo de la ventana

Los FLAGs pueden ser: (se pueden separar con | )

  • 0: ninguno
  • FULLSCREEN: pantalla completa
  • DOUBLEBUF: Uso de display con doble buffer
  • HWSURFACE: Establece que el display sea manejado con Hardware
  • OPENGL: Añade soporte para OpenGl en nuestra aplicación
  • RESIZABLE: La ventana se puede redimensionar
  • NOFRAME: La ventana no tiene bordes ni barra de título

Bucle Principal:

while True:
	for event in pygame.event.get(): #captura de eventos
		if event.type == QUIT: #si quiere cerrar la ventana
			exit()  #salgo de la aplicacion, requiere "from sys import exit"
	#............ #  dibujar cosas en pantalla y detectar eventos
	pygame.display.update() #actualizar pantalla

Nota: las cosas que siguen deben hacerse en el bucle principal para que se mantengan en el tiempo

Dibujando en pantalla:

pantalla.blit(recurso, (posX,posY)) # recurso puede ser una imagen o un texto

Cargando y dibujando imágenes:

mi_imagen = pygame.image.load('directorio/subdirectorio/archivo.png')
pantalla.blit(mi_imagen,(posX, posY))

Dibujando texto:

pantalla.blit(pygame.font.Font(FUENTE.ttf, TAMAÑO).render(str("Texto"), True, COLOR), (posX, posY))) 
#fuente se puede omitir poniendo None para que dibuje con la fuente por defecto. El valor True antes de COLOR es para dibujar con antialiasing

Detectando eventos:

for event in pygame.event.get():
	if event.type == pygame.KEYDOWN:
		if event.key == pygame.TECLA:
			#detecto la TECLA
		if pygame.mouse.get_pressed()[NUM_BOTON] == True:
			#detecto NUM_BOTON, 0 para el primario, 1 para el secundario, 2 para otro

Nota: TECLA debe ser el código de alguna tecla, en formato SDL. Más Información

Reproduciendo Música y Sonidos:
Pygame tiene dos formas de reproducir audio, pygame.mixer.Sound es para sonidos cortos que empiezan y terminan, mientras que pygame.mixer.music reproduce música en segundo plano, ideal para música de fondo. Soporta archivos wav y ogg.

Música:

pygame.mixer.music.load('ARCHIVO.ogg') #carga el archivo
pygame.mixer.music.play(REPETICIONES,INICIAR_DESDE) #lo reproduce
pygame.mixer.music.stop()  #detiene la reproduccion

REPETICIONES puede tomar los siguientes valores:

  • None: se reproduce sólo una vez
  • 1..n: se reproduce n veces
  • -1: se reproduce infinitamente

INICIAR_DESDE es el tiempo en milisegundos desde donde queremos que se empiece a reproducir el archivo. Si lo ponemos en negativo, va a esperar esa cantidad de milisegundos desde esa línea antes de reproducirse.

Sonido:

sonido = pygame.mixer.Sound('archivo.wav') #carga el archivo
sonido.play() #lo reproduce
sonido.fadeout(MILISEGUNDOS) 
#baja el volumen durante MILISEGUNDOS y luego detiene la reproduccion

Definir nuestros propios eventos:

MI_EVENTO = pygame.USEREVENT+k #k es un identificador de evento, todos tienen que tener valores distintos, por ejemplo 1, 2, 3...
if event.type == MI_EVENTO:
    #manejar el evento



Esto es todo por hoy, como dije es una guía muy básica para que puedan empezar.

Por último, comparto un ejemplo en el que aplicamos todo lo explicado.
DESCARGA DEL EJEMPLO

Nota: demás está decir que se necesita python y pygame instalados…


Enlaces:
Sitio web de Python
Sitio web de Pygame



Nota sobre Pygame en Windows:
Como dice en la página de Pygame, si van a usarlo con Windows, por ahora se recomienda que usen la versión 2.5.4 de Python (que no es la última). La descargan desde aquí.