Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Pygame
  3. Principales módulos de Pygame
Extrait - Pygame Iníciese en el desarrollo de videojuegos en Python
Extractos del libro
Pygame Iníciese en el desarrollo de videojuegos en Python Volver a la página de compra del libro

Principales módulos de Pygame

Introducción

Aquí la idea es proporcionar una documentación relativamente precisa de los principales módulos y objetos de Pygame utilizados en el libro. De hecho, aunque la documentación oficial en línea es excelente, actualmente no hay documentación disponible en castellano. El objetivo no es cubrir exhaustivamente cada módulo, sino al menos tener una documentación muy completa de las funciones utilizadas con frecuencia en el desarrollo con Pygame. Solo se ignoran las funciones utilizadas con poca frecuencia.

La documentación oficial en línea de Pygame está disponible en la dirección web: https://www.pygame.org/docs/

Los módulos u objetos detallados aquí están en el orden de su primer uso en el libro:

1. Color

2. time

3. event

4. display

5. Surface

6. draw

7. image

8. font

9. mouse

10. key

11. transform

12. mixer

13. music

14. sprite

Una aclaración en cuanto a una notación que se usará con regularidad: la siguiente línea significa que la llamada a la función Ejemplo1, que recibe como argumento a y b, devuelve un int.

Ejemplo1(a, b) -> int 

Otro ejemplo, la función Ejemplo2 que recibe como argumento i, j y k devuelve un objeto de tipo Color.

Ejemplo2( i, j, k) -> Color 

El objeto Color

1. La clase Color

La clase Color se utiliza para crear instancias de objetos que representan colores.

Los colores se definen mediante una tupla (r, g, b, a):

  • r representa el componente rojo, un valor entre 0 y 255.

  • g representa el componente verde, un valor entre 0 y 255.

  • b representa el componente azul, un valor entre 0 y 255.

  • a representa el componente alfa que define la opacidad asociada, es un valor entre 0 y 255. 255 representa la opacidad total y es el valor predeterminado. Bajar este valor significa bajar un poco la opacidad y hacer que el elemento coloreado (un píxel o una forma geométrica) sea un poco más transparente.

2. Los constructores de Color

Hay tres funciones de tipo constructor para crear un objeto Color:

Color(r, g, b) -> Color 
Color(r, g, b, a=255) -> Color 
Color(color_value) -> Color 

Por lo tanto, podemos crear un objeto Color pasando los argumentos r, g y b. También podemos especificar a (alfa), cuyo valor predeterminado es 255.

3. Las principales funciones de la clase Color

Función de tipo descriptor de acceso que permite obtener o modificar la cantidad r:

pygame.Color.r 

Función de tipo descriptor de acceso que permite obtener o modificar la cantidad g:

pygame.Color.g 

Función de tipo descriptor de acceso que permite obtener o modificar la cantidad b:

pygame.Color.b 

Una función de tipo descriptor de acceso que permite obtener o modificar la cantidad a (alfa)....

El módulo Time

1. La función get_ticks

get_ticks() -> milisegundos 

Esta función se utiliza para obtener el número de milisegundos entre la inicialización de Pygame (llamada pygame.init()) y la llamada de esta función get_ticks.

Por ejemplo, al ejecutar este programa:

import pygame 
pygame.init() 
screen=pygame.display.set_mode((200,400)) 
print(pygame.time.get_ticks()) 

obtenemos (en la máquina utilizada) el siguiente valor en el terminal:

1727 

Esto significa que entre la llamada de init y la llamada de get_ticks, hubo una duración de 1 a 2 segundos.

2. La función wait

wait(milisegundos) -> time 

La función wait permite pausar la ejecución durante un período de tiempo expresado en milisegundos.

3. La función delay

delay(milisegundos) -> time 

La función delay, como wait, permite pausar la ejecución durante un período de tiempo expresado en milisegundos. Utiliza el procesador del ordenador y, por lo tanto, se supone que es más precisa que wait.

4. La función set_timer

set_timer(eventid, milisegundos) -> None 

Esta función set_timer permite crear un evento que se coloca en la cola de los eventos. Se activa cíclicamente cada x milisegundos, donde x es el valor que se pasa como argumento.

Por ejemplo, en el código siguiente, activamos un evento cada segundo.

import pygame 
pygame.init() 
screen=pygame.display.set_mode((200,400)) ...

El módulo event

El módulo event permite administrar eventos. Tan pronto como se genera un evento, desde un teclado, ratón u otro periférico de juego, se coloca en una cola que el módulo event permite administrar y usar. El papel de las funciones de este módulo es interactuar con la cola de eventos.

Un evento se define primero por su tipo EventType. Los valores principales de este argumento son:

QUIT             0 
ACTIVEEVENT      1 
KEYDOWN          2 
KEYUP            3 
MOUSEMOTION      4 
MOUSEBUTTONUP    5 
MOUSEBUTTONDOWN  6 
JOYAXISMOTION    7 
JOYBALLMOTION    8 
JOYHATMOTION     9 
JOYBUTTONUP     10 
JOYBUTTONDOWN   11 
VIDEORESIZE     12 
VIDEOEXPOSE     13 
USEREVENT       14 

1. La función pump

pump() -> None 

Es muy raro tener que utilizar esta función. Se corresponde con la siguiente situación: no utilizar eventos en el bucle de juego. En este caso, todavía es necesario mantener...

El módulo display

Este módulo se utiliza sistemáticamente en un código Pygame, ya que gestiona todos los aspectos relacionados con la ventana del juego. En el módulo pygame se puede llamar directamente a algunas funciones de display.

Así:

pygame.init() 

es equivalente a:

pygame.display.init() 

1. La función init

init() -> None 

Esta es la función que permite inicializar Pygame. No podemos prescindir de ella y la usamos sistemáticamente en cada código de Pygame. Tenga en cuenta que los dos códigos siguientes son equivalentes y que, en general, es preferible el segundo.

pygame.display.init() 

pygame.init() 

2. La función quit

quit() -> None 

Esta es la función que permite detener el uso del módulo display y, más generalmente, el módulo de Pygame. Tenga en cuenta que los dos códigos siguientes son equivalentes y que, en general, es preferible el segundo.

pygame.display.quit() 

pygame.quit() 

3. La función get_init

get_init() -> bool 

La función get_init permite saber si se ha producido la inicialización de Pygame.

Ejemplo

import pygame 
print(pygame.display.get_init()) 
pygame.display.init() 
print(pygame.display.get_init()) 

Obtenemos esto en el terminal:

0 
1 

4. La función set_mode

set_mode(size=(0, 0), flags=0, depth=0, display=0) -> Surface 

Esta es la función encargada de crear la superficie asociada...

El objeto Surface

La superficie en el desarrollo usando Pygame, es un objeto que permite representar imágenes en el sentido más amplio de la palabra: áreas geométricas coloreadas, áreas que albergan archivos de imagen, cuadros de texto o la propia ventana de juego, que también es una superficie.

1. El constructor de Surface

Surface((width, height), flags=0, depth=0, masks=None) -> Surface 

Además de la anchura y la altura de la superficie que se va a crear, el resto de argumentos tienen valores predeterminados. De hecho, flags, depth y masks se corresponden con usos muy específicos y raros.

En el siguiente ejemplo se crea una superficie "base" que no está dedicada específicamente a un archivo de imagen, texto u objeto geométrico. Solo especificamos que el ancho es igual a 50 y el alto a 25.

import pygame 
pygame.init() 
 
superficie = pygame.Surface((50, 25)) 
print(superficie) 

En el terminal, obtenemos lo siguiente: encontramos las dimensiones 50 y 25, así como los valores predeterminados del resto de argumentos.

<Surface(50x25x32 SW)> 

2. La función blit

Esta función es fundamental porque permite posicionar una superficie dentro de otra. Como recordatorio, la ventana del juego es una superficie. Esta función blit permite colocar una superficie en la ventana del juego.

blit(source, dest, area=None, special_flags=0) -> Rect 

Aquí mostramos una superficie de color azul en un lugar determinado de la ventana de juego.

import pygame 
pygame.init() 
 
pygame.display.set_caption(u'Blit') 
 ventana = pygame.display.set_mode((400, 400)) 
 
superficie = pygame.Surface((50, 25)) 
azul = (0, 0, 255) 
superficie.fill(azul) ...

El módulo draw

El módulo draw es el módulo de Pygame que permite mostrar formas geométricas. Su uso es relativamente intuitivo, las funciones generalmente reciben el nombre (en inglés) de las formas que se desea mostrar.

1. La función rect

rect(superficie, color, rect, width=0) 

Para mostrar un rectángulo, pasamos como argumento:

  • el área de visualización,

  • el color del contorno,

  • el par de coordenadas del punto superior izquierdo e inferior derecho del rectángulo,

  • el eventual grosor del contorno.

Ejemplo de uso

ventana = pygame.display.set_mode((400, 400)) 
rojo = pygame.Color(255,0,0) 
pygame.draw.rect(ventana, rojo, ((50, 50), (150, 100)), 1) 

2. La función polygon

polygon(superficie, color, puntos, width=0) -> Rect 

De acuerdo con el mismo principio que antes, la función polygon permite dibujar un polígono. Comenzamos creando la lista de puntos que forman el polígono.

puntos = [(200, 200), (250, 300), (300, 325), (400, 350)] 

Posteriormente, se muestra con un grosor de línea de 1 y un color de línea amarillo.

amarillo = pygame.Color(255,255,0) 
pygame.draw.polygon( ventana, amarillo, puntos, 1) 

3. La función circle

circle(superficie, color, center, radius, width=0) -> Rect 

La función circle permite mostrar un círculo en una superficie determinada. Como argumento definimos su color, las coordenadas de su centro, su radio y el posible...

El módulo image

El módulo image se utiliza para mostrar archivos de tipo image en un juego de Pygame.

1. La función load

load(filename) -> Surface 

La función load permite cargar un archivo de imagen desde el disco y mostrarlo como una superficie en la ventana de juego.

Ejemplo

superficieImagen = pygame.image.load("MiImagen.jpg") 

Las siguientes extensiones son compatibles con la función load:

  • JPG

  • PNG

  • GIF (no animado)

  • BMP

  • PCX

  • TGA (descomprimido)

  • TIF

  • LBM (y PBM)

  • PBM (y PGM, PPM)

  • XPM

2. La función save

save(Surface, filename) -> None 

La función save es la recíproca de la función load. Permite guardar una superficie Pygame en un archivo de imagen en el disco.

Ejemplo de uso desde una superficie denominada IMAGEN

pygame.image.save(IMAGEN, "IMAGEN_ARCHIVO.png") 

Las siguientes extensiones son compatibles con la función save:

  • BMP

  • TGA

  • PNG

  • JPEG

3. Las funciones tostring, fromstring, frombuffer

tostring(Surface, format, flipped=False) -> string 

fromstring(string, size, format, flipped=False) -> Surface 

frombuffer(string, size, format) -> Surface 

La función tostring permite crear un búfer de cadena de caracteres que representa la imagen. La función fromstring se utiliza para crear una superficie de tipo imagen a partir de un búfer de cadena de caracteres. La función frombuffer permite crear una superficie de tipo imagen a partir de un buffer....

El módulo font

El módulo font garantiza la gestión del texto en Pygame.

1. La función init

init() -> None 

Se supone que no se debe llamar a esta función que inicializa el módulo font. De hecho, la llamada obligatoria pygame.init() se encarga de llamarla. Por lo tanto, la función se llama automáticamente. 

2. La función quit

quit() -> None 

Se supone que no debe llamar a esta función, que permite salir del módulo font. De hecho, la llamada pygame.quit() se encarga de llamarla. Por lo tanto, la función se llama automáticamente.

3. La función get_init

get_init() -> bool 

Esta función, que devuelve un booleano, se utiliza para verificar si el módulo font está inicializado o no.

4. La función get_default_font

get_default_font() -> string 

Esta función get_default_font permite saber cuál es el tipo de letra predeterminado.

Ejemplo

import pygame 
pygame.init() 
print(pygame.font.get_default_font()) 

Obtenemos esto en el terminal:

freesansbold.ttf 

5. La función get_fonts

pygame.font.get_fonts() 

Esta función se utiliza para obtener una lista de todas las fuentes de caracteres disponibles en la máquina donde se ejecuta el programa.

Ejemplo

import pygame 
pygame.init() 
print(pygame.font.get_fonts()) 

Posteriormente, obtenemos algo comparable a esto en el terminal:

['bigcaslonttf'...

El módulo mouse

El módulo mouse permite gestionar las distintas interacciones relacionadas con el ratón y así trabajar con este dispositivo en Pygame.

1. La función get_pressed

get_pressed() -> (button1, button2, button3) 

Esta función devuelve una matriz de booleanos que indica el estado de cada botón del ratón. Si el valor es True, se pulsa el botón del ratón correspondiente.

Esta función rara vez se utiliza. Es preferible realizar un análisis de los eventos de la cola de eventos, como se explicó en el capítulo Diseño y grafismo en todos sus estados con Pygame.

En el siguiente ejemplo se utiliza get_pressed.

import pygame 
pygame.display.init() 
print(pygame.mouse.get_pressed()) 

El resultado en el terminal es el siguiente:

(0, 0, 0) 

2. La función get_pos

get_pos() -> (x, y) 

La función get_pos se utiliza para obtener las coordenadas actuales del cursor del ratón.

Ejemplo

import pygame 
pygame.display.init() 
 ventana = pygame.display.set_mode((400, 400)) 
 
while True: 
 print(pygame.mouse.get_pos()) 
 for event in pygame.event.get(): 
   if event.type == pygame.QUIT: 
     pygame.quit() 

A continuación, se muestra una de las líneas que aparece en el terminal:

(224, 351) 

3. La función get_rel

get_rel() -> (x, y) 

Esta función...

El módulo ley

El módulo key permite administrar las interacciones con el teclado del ordenador.

1. Las constantes correspondientes a las teclas del teclado

Cada tecla tiene su código Pygame que permite verificarla en la cola de eventos en particular.

Aquí está la lista casi exhaustiva de estas constantes de Pygame:

K_BACKSPACE   \b      backspace 
K_TAB         \t      tab 
K_CLEAR               clear 
K_RETURN      \r      return 
K_PAUSE               pause 
K_ESCAPE      ^[      escape 
K_SPACE               space 
K_EXCLAIM     !       exclaim 
K_QUOTEDBL    "       quotedbl 
K_HASH        #       hash 
K_DOLLAR      $       dollar 
K_AMPERSAND   &       ampersand 
K_QUOTE               quote 
K_LEFTPAREN   (       left parenthesis 
K_RIGHTPAREN  )       right parenthesis 
K_ASTERISK    *       asterisk 
K_PLUS        +       plus sign 
K_COMMA       ,       comma 
K_MINUS       -       minus sign 
K_PERIOD      .       period 
K_SLASH       /       forward slash 
K_0           0       0 ...

El módulo transform

El módulo transform permite crear superficies Pygame nuevas aplicando a una superficie original una o más transformaciones, isométricas o no.

1. La función flip

flip(Surface, xbool, ybool) -> Surface 

La función flip permite la simetría axial, vertical u horizontal o ambas. Recibe como argumento la superficie que vamos a transformar, un booleano que indica que procedemos a una simetría según el eje vertical y un booleano que indica que procedemos a una simetría a lo largo del eje horizontal. Si los dos booleanos son True, entonces procedemos a ambas simetrías.

2. La función scale

scale(Surface, (width, height), DestSurface = None) -> Surface 

La función scale permite redimensionar una superficie. La altura y la anchura de la superficie objetivo se pasan como argumento.

3. La función rotate

rotate(Surface, angle) -> Surface 

La función rotate permite rotar la superficie. El ángulo que se pasa como argumento se expresa en sentido hacia la izquierda, en grados y no en radianes, como es el caso con otras funciones de Pygame (el dibujo de arcos de elipse en particular).

4. La función rotozoom

rotozoom(Surface, angle, scale) -> Surface 
scale2x(Surface, DestSurface = None) -> Surface 

La función rotozoom permite combinar rotación y homotecia. Esto puede ser particularmente útil para simular el lanzamiento...

El módulo mixer

El módulo mixer permite administrar el sonido en un juego de Pygame, ya sea el aspecto de sonido de fondo o los efectos de sonido.

1. La función init

init(frequency=22050, size=-16, channels=2, buffer=4096, devicename=None,  
allowedchanges=AUDIO_ALLOW_FREQUENCY_CHANGE | AUDIO_ALLOW_CHANNELS_CHANGE) -> None 

La función init se utiliza para inicializar el módulo mixer. Es necesaria para poder utilizar el módulo.

pygame.mixer.init() 

2. La función quit

quit() -> None 

Esta función termina con el uso del módulo mixer. Si se están reproduciendo sonidos cuando se llama a la función, estos se interrumpen.

pygame.mixer.quit() 

3. La función get_init

get_init() -> (frequency, format, channels) 

La función get_init permite saber si el módulo está correctamente inicializado. Si es así, la función devuelve una cierta cantidad de información. De lo contrario, devuelve None.

import pygame 
pygame.init() 
pygame.mixer.init() 
print(pygame.mixer.get_init()) 

Posteriormente, obtenemos esto en el terminal:

(22050, -16, 2) 

4. El objeto Sound

El objeto Sound se utiliza para crear un objeto sonido.

a. Los constructores de Sound

Sound(filename) -> Sound 
Sound(file=filename) -> Sound 
Sound(buffer) -> Sound 
Sound(buffer=buffer) -> Sound 
Sound(object) -> Sound 
Sound(file=object) -> Sound 
Sound(array=object) -> Sound 

Los constructores disponibles permiten crear...

El módulo music

Este módulo mixer.music se utiliza para "transmitir" el sonido de fondo y, de manera más general, para administrar el fondo de sonido. Por lo tanto, la clase Sound del módulo mixer se usa más bien para efectos de sonido, mientras que el módulo music está más bien dedicado al fondo de sonido.

1. La función load

load(filename) -> None 

La función load permite cargar un archivo de sonido para reproducirlo como fondo de sonido.

2. La función unload

unload() -> None 

La función unload se utiliza para descargar el archivo de sonido actual que se había cargado previamente.

3. La función play

play(loops=0, start=0.0) -> None 

La función play permite reproducir el archivo de sonido previamente cargado. Podemos indicar cuántas veces queremos leerlo en bucle. Además, es posible no empezar desde el principio del archivo, sino indicar una posición en el archivo desde la que se inicia la reproducción.

En el siguiente ejemplo, el archivo se lee cinco veces seguidas.

import pygame 
pygame.init() 
pygame.mixer.init() 
 
fondo = pygame.mixer.music.load("gallo.ogg") 
pygame.mixer.music.play(5, 0.0) 
 
while True: 
 event = pygame.event.wait() 
 if event.type == pygame.QUIT: 
   break 
 
pygame.quit() 

4. La función rewind

rewind()...

El módulo sprite

El módulo sprite permite administrar el uso de los sprites en un programa Pygame. Esta noción se discute ampliamente en los capítulos Sprites con Pygame y Llegar más lejos con el módulo Sprite, ejemplos aplicados.

Este módulo incluye varias clases, especialmente las clases Sprite y Group, que es un objeto que puede mantener una colección de objetos sprite.

1. La clase Sprite

a. La función update

update(*args) -> None 

Una vez creada la instancia de Sprite (normalmente una instancia de una clase heredada de la clase Sprite), la función update permite actualizar automáticamente las características del sprite actual.

b. La función add

add(*groups) -> None 

La función add permite agregar la instancia actual de Sprite a uno o más grupos.

c. La función remove

remove(*groups) -> None 

La función remove permite eliminar la instancia actual de Sprite de uno o más grupos.

d. La función kill

kill() -> None 

La función kill solo es un destructor. Su llamada permite destruir la instancia actual de Sprite.

e. La función alive

alive() -> bool 

La función alive devuelve True si la instancia actual de Sprite pertenece al menos a un grupo.

f. La función groups

groups() -> group_list 

La función groups se utiliza para obtener una lista con todos los grupos a los que pertenece la instancia actual...