PYGAME Por: Luis Morocho Contenido: INSTALACIÓN MARCO TEÓRICO EJEMPLO EJERCICIO Instalación para windows • Utilic
Views 57 Downloads 9 File size 1MB
PYGAME Por: Luis Morocho
Contenido:
INSTALACIÓN MARCO TEÓRICO
EJEMPLO EJERCICIO
Instalación para windows •
Utilice python 3.7.7 o superior, porque es mucho más amigable, y además se ejecuta más rápido.
•
La mejor manera de instalar pygame es con la herramienta pip (que es lo que Python utiliza para instalar paquetes).
pip install pygame •
Usamos la marca --user para indicarle que se instale en el directorio principal, en lugar de globalmente.
py -m pip install -U pygame --user
•
Para ver si funciona, ejecute uno de los ejemplos incluidos:
py -m pygame.examples.aliens •
Si obtiene 'PermissionError: [WinError 5] Se deniega el acceso', antes de iniciar el símbolo del sistema, haga clic con el botón derecho y "Ejecutar como administrador".
(pygame, 2020)
Es un conjunto de módulos del lenguaje Python que permite la creación de videojuegos en dos dimensiones de una manera sencilla. Esta orientado al manejo de sprites. (Wikipedia, 2020)
Marco teórico
Además, es un marco que permite una fácil manipulación de elementos comunes del juego como: • Fondos • Sprites • Acciones y Movimientos
¿Que es pygame?
• Sonidos y Música
• Manejo de eventos Sprite: Es una imagen bidimensional que forma parte de una escena grafica aun mayor. Habitualmente es cierto tipo de objeto que interactúa, por ejemplo, un coche, una rana etc. (Vincent Craven, 2017)
Servicios principales
Visualización
Rect
Superficie
Sprite
Mezclador
Grupo
Pygame
Visualización(Display) Visualización es lo que se ve y la llamada real para mostrar la imagen en la pantalla • Init Inicializa las variables de visualización • Flip Reemplaza la pantalla actual por el búfer de pantalla apagado
Superficies(Surface)
• Surface es uno de los servicios principales con los que interactúas cuando usas pygame. • Surface se utiliza para representar una imagen o combinación de imágenes en la pantalla
Sprite
• Sprite también se utiliza a menudo en el desarrollo de juegos para representar a los actores • Es una clase base para representar objetos de juego • Viene con un gran conjunto de métodos incorporados que se encargan de las interacciones comunes con el entorno del juego
Grupo(Group) • Group es una clase contenedora para sprites. • Es muy útil para manipular grandes conjuntos de sprites • Definirá comportamientos más específicos para grupos de sprites
Rect
• Rect es la representación de nivel inferior de objetos como sprites. • Define y controla áreas específicas en las pantallas
Mezclador(Mixer) • Mixer es la forma en que el programador implementa efectos de sonido y música dentro del juego. • Tiene todos los métodos utilizados para controlar los sonidos en el juego.
Pygame
• Pygame básicamente sólo se utiliza para el método Init() que inicializa todos los módulos pygame importados. • También es capaz de manejar errores.
Conceptos principales
• Pygame es el paquete de nivel superior que es roto por varios submódulos que realizan los diversos servicios • Rect y Surface son ejemplos de clases que crean estos submódulos
• Hay varias clases como Display e Image y Font que crean submódulos de los submódulos de nivel inferior como Rect y Surface
• Ejemplo de construcción de un juego usando el framework Pygame (Stout, Meador, Seeland, & Robinson, 2020)
Descripción general de los módulos de Pygame
cdrom
Reproducción
cursors
cargar imágenes del cursor, incluye cursores estándar
display
controlar la ventana de visualización o la pantalla
draw
dibujar formas simples en una superficie
event
gestionar los eventos y la cola de eventos
font
crear y renderizar fuentes TrueType
image
guardar y cargar imágenes
joystick
gestionar dispositivos joystick
key
gestionar el teclado
mouse
gestionar el ratón
sndarray
manipular sonidos con numpy
surfarray
manipular imágenes con numpy
time
tiempo de control
transform
escalar, rotar y voltear imágenes
Ejemplo: Realizar un programa usando pygame que muestre una pelota en movimiento y que rebote en los perímetros de la pantalla. Primera parte •
Esta sección cuenta con los siguientes pasos
•
Importamos la librería
•
Inicializamos el motor del juego
•
Creamos una ventana de 800x600
•
Colocamos la etiqueta “Juego BALL” a la ventana
•
Capturamos los eventos
Todos los juegos tienen normalmente la misma estructura, es decir, un juego es un bucle infinito dónde se van obteniendo los eventos, que pueden ser las pulsaciones de teclas o las pulsaciones y movimientos del ratón, y según el evento que se vaya produciendo se va a provocar una operación u otra. En esta primera versión del juego el único evento que vamos a recoger es el evento QUIT, que es el evento que se produce cuando le damos al botón cerrar de la ventana. En ese caso terminaría el bucle y terminaría el programa.
import sys, pygame # Inicializamos pygame pygame.init() # Muestro una ventana de 800x600 size = 800, 600 screen = pygame.display.set_mode(size) # Cambio el título de la ventana pygame.display.set_caption("Juego BALL") # Comenzamos el bucle del juego run=True while run: # Capturamos los eventos que se han producido for event in pygame.event.get(): # Si el evento es salir de la ventana, terminamos if event.type == pygame.QUIT: run = False # Salgo de pygame pygame.quit()
Segunda parte: •
Después de crear la ventana inicializamos una serie de variables, anchura, altura y velocidad. Velocidad es una lista, porque es el número de coordenadas X e Y que se va a mover nuestro objeto.
•
Definimos un color
•
Creamos un objeto “ball” a partir de una imagen que tenemos de una pelota
•
Vamos a obtener el rectángulo de la imagen, que nos va a servir para mover la imagen o para ver si la imagen colisiona con algún elemento de la ventana
•
Dentro del bucle hemos añadido un delay y así esperar 2 milisegundos, para que la velocidad con la que se va a mover la pelota no sea muy rápida
•
Capturamos los eventos, como en la versión anterior, pero en esta ocasión vamos a mover la bola a la velocidad que hemos indicado
•
Además, vamos a comprobar si la pelota, el rectángulo, toca uno de los laterales de la ventana, entonces cambiamos la dirección de movimiento de la coordenada X o la dirección de movimiento de la coordenada Y.
•
Por último, actualizamos la ventana, para que se vea cómo la pelota se mueve alrededor de la ventana.
•
Si cambiamos el valor del delay a 1 la pelota se mueve más rápidamente.
•
(Domingo Muñoz, 2019)
import sys, pygame # Inicializamos pygame pygame.init() # Muestro una ventana de 800x600 size = 800, 600 screen = pygame.display.set_mode(size) # Cambio el título de la ventana pygame.display.set_caption("Juego BALL") # Inicializamos variables width, height = 800, 600 speed = [1, 1] white = 255, 255, 255 # Crea un objeto imagen y obtengo su rectángulo ball = pygame.image.load("ball.png") ballrect = ball.get_rect() # Comenzamos el bucle del juego run=True while run: # Espero un tiempo (milisegundos) para que la pelota no vaya muy rápida pygame.time.delay(2) # Capturamos los eventos que se han producido for event in pygame.event.get(): #Si el evento es salir de la ventana, terminamos if event.type == pygame.QUIT: run = False # Muevo la pelota ballrect = ballrect.move(speed) if ballrect.left < 0 or ballrect.right > width: speed[0] = -speed[0] if ballrect.top < 0 or ballrect.bottom > height: speed[1] = -speed[1] #Pinto el fondo de blanco, dibujo la pelota y actualizo la pantalla screen.fill(white) screen.blit(ball, ballrect) pygame.display.flip() # Salgo de pygame pygame.quit()
Ejercicio: Agregar un bate al programa anterior para que rebote la pelota
En este ejercicio deberá añadir lo siguiente: • Crear el bate desde una imagen # Crea un objeto imagen bate y obtengo su rectángulo bate = pygame.image.load("bate.png") baterect = bate.get_rect() # Pongo el bate en el centro de la pantalla baterect.move_ip(400, 260) •
Capturamos las pulsaciones de las teclas, en este caso, las pulsaciones de la tecla arriba o la tecla abajo, y eso permitira mover el bate hacia arriba o hacia abajo. # Compruebo si se ha pulsado alguna tecla keys = pygame.key.get_pressed() if keys[pygame.K_UP]: baterect=baterect.move(0, -1) if keys[pygame.K_DOWN]: baterect=baterect.move(0, 1)
• Comprobar si el bate colisiona con la pelota, y lo hace, cambiar el eje X de la pelota para que rebote. # Compruebo si hay colisión if baterect.colliderect(ballrect): speed[0] = - speed[0] •
Al ejecutar el programa se debe poder mover el bate con las teclas de arriba y abajo, y si tocamos la pelota con el bate va a rebotar. # Dibujo bate screen.blit(bate, baterect)
Bibliografía • Domingo Muñoz, J. (4 de Febrero de 2019). Cómo hacer un juego con PYGAME en 10 minutos. Obtenido de https://openwebinars.net/blog/como-hacer-un-juego-con-pygame-en-10-minutos/ • pygame. (1 de Enero de 2020). Pygame Installation. Obtenido de https://www.pygame.org/wiki/GettingStarted#Pygame%20Installation • Stout, R., Meador, J., Seeland, M., & Robinson, P. (1 de Enero de 2020). Pygame Framework. Obtenido de https://www.cs.colorado.edu/~kena/classes/6448/f08/framework_presentations/pygame.pdf • Vincent Craven, P. (1 de Enero de 2017). Programar Juegos Arcade con Python y Pygame. Obtenido de http://programarcadegames.com/index.php?chapter=introduction_to_sprites&lang=es • Wikipedia. (9 de Abril de 2020). Pygame. Obtenido de https://es.wikipedia.org/wiki/Pygame