Una de las funciones que más se repite en los juegos es la colisión entre objetos.
Objetivo:
En esta ocasión vamos a mostrar como colisionan dos cuadrados y la colisión impide el paso. Nuestro objeto no puede seguir avanzando porque encuentra un obstáculo que hemos colocado en su camino.
En primer lugar definimos variables con valores iniciales y definimos también los colores que vamos a utilizar.
import pygame
pygame.init()
negro=pygame.Color('black')
rojo=pygame.Color('red')
blanco=pygame.Color('white')
colorFondo=blanco
width = 1200
height = 700
vel=0
x=200
y=480
Creamos ahora nuestra ventana de juego y abrimos el bucle.
#----------------Ventana y título---------------------
ventana = pygame.display.set_mode((width,height))
pygame.display.set_caption('Ladrillo')
clock=pygame.time.Clock()
#/////////////////Bucle del juego/////////////////
gameOver=False
while not gameOver:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameOver=True
El siguiente paso va a definir el movimiento accionado con el teclado.
#----------- Teclas derecha izquierda ---------------
if event.type == pygame.KEYDOWN:
if event.key ==pygame.K_LEFT:
vel = -3
if event.key == pygame.K_RIGHT:
vel = 3
if event.type == pygame.KEYUP:
if event.key ==pygame.K_LEFT:
vel = 0
if event.key == pygame.K_RIGHT:
vel = 0
#------------ LOGICA -------------------
x += vel
if x<90:
x=90
Cunado pulsamos la tecla LEFT se asigna a la variable VEL el valor -3 y 3 cuando pulsamos RIGHT. Cero cuando dejamos de pulsar.
En la lógica cambiamos el valor de X que es la coordenada que sitúa nuestro cuadrado en el área de juego, evitando que se salga de la ventana mediante un condicional
Ya solo nos queda dibujar los objetos y el fondo
#-------------FONDO---------------------
ventana.fill(colorFondo) #Fondo color
#------------ DIBUJO ------------------
ladrillo=pygame.draw.rect(ventana, negro,(600,480,90,85))
cuadroMovil=pygame.draw.rect(ventana, rojo,(x-90,y,90,85))
Como vemos en las coordenada de x restamos 90 que es el ancho del cuadro móvil.
Ahora es el momento de definir la colisión.
if cuadroMovil.colliderect(ladrillo):
x=600
pygame.display.flip()
pygame.quit()
Si cuadroMovil colisiona con cuadro ladrillo, entonces la x pasa a valer 600 que es la posición del cuadrado ladrillo.
También puede seguir el vídeo para completar la funcionalidad del juego que seguro vas a utilizar en muchos de tus juegos.
Juande Marín
Profesor de Marketing digital, divulgador de inteligencia artificial y neuroeducación. Especializado en posicionamiento en buscadores y diseño web. Autor de varios libros relacionados con el comercio electrónico y el marketing digital (McGraw Hill, Paraninfo,…) Juande2marin