En la mayoría de juegos los personajes tienen que esquivar o saltar obstáculos para seguir la aventura, vamos a mostrar como hacerlo con dos cuadrados que luego podemos convertir en personajes.
Comenzamos por importar librería y asignar valores iniciales a variables que luego utilizaremos.
import pygame
pygame.init()
negro=pygame.Color('black')
rojo=pygame.Color('red')
blanco=pygame.Color('white')
gris=pygame.Color('gray')
colorFondo=blanco
width = 900
height = 700
vel=0
salto=10
isJump=False
x=200
y=480
Definimos la ventana y abrimos el bucle del juego.
#----------------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
Con el teclado asignamos valores para desplazar las coordenadas a izquierda y derecha.
#----------- Teclas derecha izquierda ---------------
if event.type == pygame.KEYDOWN:
if event.key ==pygame.K_LEFT: #Si es menor no voy a despalzar
vel = -7
if event.key == pygame.K_RIGHT: #Llega hasta el ancho menos el ancho del personaje
vel = 7
# Si no está en salto /////////////////////////
if event.key ==pygame.K_SPACE:
isJump=True
if event.type == pygame.KEYUP:
if event.key ==pygame.K_LEFT: #Si es menor no voy a despalzar
vel = 0
if event.key == pygame.K_RIGHT: #Llega hasta el ancho menos el ancho del personaje
vel = 0
Definimos, a continuación el salto.
if isJump: # Si está en salto/////////////////////////////////
if salto>= -20: #Caida hasta -20
y -= (salto * abs(salto)) *0.5 #La variable va reduciendo hasta llegar arriba 10 y luego inverso hasta -20
salto-=1 #Decrementamos el valor de salto para obtener valores de y
if movil.colliderect(suelo): #Si colisiona con suelo reseteamos valor salto para volver a saltar
salto=10
isJump=False
else:
salto = 10 #Reseteamos la variable para próximos saltos
isJump=False #Salgo del ciclo
La variable isJump es TRUE cuando pulsamos la tecla SPACE, entonces dibujamos una parábola que termina si colisionamos con el cuadrado suelo o cuando la variable salto llega a -20. En los dos casos reseteamos salto y ponemos isJump en FALSE para que pueda volver a saltar.
En la parte lógica cambiamos coordenadas de x con la acción del teclado y limitamos el campo de acción por la ventana.
#------------ LOGICA -------------------
x += vel #Coordenadas x añaden velocidad "vel"
if y>480:
y=480
if x<40:
x=40
if x>800:
x=800
Dibujamos el fondo y los cuadrados.
#-------------FONDO---------------------
ventana.fill(colorFondo) #Fondo color
#------------ DIBUJO ------------------
suelo=pygame.draw.rect(ventana, gris,(410,480,60,20))
ladrillo=pygame.draw.rect(ventana, negro,(400,500,80,60))
movil=pygame.draw.rect(ventana, rojo,(x,y,80,80))
Ahora vamos a configurar las colisiones. Si el cuadrado móvil colisiona con el cuadrado ladrillo impedimos que siga desplazándose y dejamos isJump en false para que pueda volver a saltar.
# //////////Colisión si viene de salto resetea valores y sale de bucle//////////////
if movil.colliderect(ladrillo):
if isJump:
y-=20
salto=10
isJump=False
# /////////////////Colisión lateral sin salto ////////////////
if vel==7 and isJump==False:
x=x-7
elif vel==-7 and isJump==False:
x=x+7
Por último si el cuadrado móvil no está en colisión con cuadrado suelo y no está en salto, entonces añadimos a la coordenada y+=10 para que caiga 10.
# Si no está en colisión con suelo y No salto cae 10
if not movil.colliderect(suelo) and isJump==False:
y+=10
pygame.display.flip()
clock.tick(20)
pygame.quit()
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