Colisión entre cuadrados

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

Material didáctico

Descubre un material moderno y adaptado a ciclos formativos.