Mover con el teclado

Vamos a crear un juego donde podamos mover el personaje pulsando en nuestro teclado.

Primero creamos la estructura del juego y las clases con los personajes.

import pygame
pygame.init()

class Girl(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/girl.png").convert_alpha()
        self.rect=self.image.get_rect() 

#Ventana y título
ventana = pygame.display.set_mode((800,700)) 
pygame.display.set_caption('Mover con el teclado')
fondo =pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/fondonubes.png").convert_alpha()
clock=pygame.time.Clock()

#------------Listas--------------
x = 50 
y = 480
vel = 0

girlLista=pygame.sprite.Group() 
girl =Girl() 
girlLista.add(girl) 

#/////////////////Bucle del juego/////////////////
gameOver=False
while not gameOver:
    for event in pygame.event.get():

Creada la clase con el personaje, la ventana de juego con el fondo y guardo el objeto en una lista.

Abro el bucle del juego para introducir las instrucciones de teclado.

    #----------- pulsar teclas y soltar tecla       

        if event.type == pygame.KEYDOWN: #Si pulso teclado añado velocidad
            if event.key == pygame.K_LEFT:
                vel=-3
            if event.key == pygame.K_RIGHT:
                vel=3
        else:
            vel=0
                
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                vel=0
            if event.key == pygame.K_RIGHT:
                vel=0
        
        if event.type == pygame.QUIT:
            gameOver=True

Con un condicional defino si las teclas están pulsadas o no.

Dentro del condicional KEYDOWN doy valor -3 o 3 a la variable «vel»

Si levanto el dedo de la tecla la variable «vel» vuelve a valor cero.

Cómo voy a mover el objeto solo en el eje de las X, aplico la variable «vel» solo a la x.

    #------------ LOGICA -------------------
    girl.rect.x=x
    girl.rect.y=y
    x += vel 
    if x < 0:
        x=0
    if x>800-90:
        x=800-90

Ya solo me queda dibujar el fondo, la lista y cerrar el juego.

    #-------------FONDO---------------------
    ventana.blit(fondo, [0,0])
    
    #------------ DIBUJO ------------------
    girlLista.draw(ventana)
       
    pygame.display.flip()
    clock.tick(60)
    
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

Material didáctico

Descubre un material moderno y adaptado a ciclos formativos.