3. Movimiento automático y movimiento simultáneo con teclado
En cada pasada del juego podemos comprobar también si se han pulsado las teclas a derecha e izquierda, para, en ese caso, mover una segunda imagen, de forma independiente al marciano que se está moviendo de forma automática:
# Mini-invaders, version 0.03 # (Imagen con teclado e imagen que rebota a la vez) # Parte de la intro a Pygame, por Nacho Cabanes import pygame from pygame.locals import * # Nuevo en la version 0.03 pygame.init() ancho = 800 alto = 600 velocidadX = 3 velocidadY = 3 terminado = False pantalla = pygame.display.set_mode( (ancho, alto) ) pygame.key.set_repeat(1,25) # Nuevo en la version 0.03 imagenMarciano = pygame.image.load("spaceinvader.png") rectanguloMarciano = imagenMarciano.get_rect() rectanguloMarciano.left = 200 rectanguloMarciano.top = 100 imagenNave = pygame.image.load("ufo.png") # Nuevo en 0.03 rectanguloNave = imagenNave.get_rect() # Nuevo en 0.03 rectanguloNave.left = ancho/2 # Nuevo en 0.03 rectanguloNave.top = alto-50 # Nuevo en 0.03 while not terminado: for event in pygame.event.get(): if event.type == pygame.QUIT: terminado = True keys = pygame.key.get_pressed() # Nuevo en 0.03 if keys[K_LEFT]: # Nuevo en 0.03 rectanguloNave.left -= 4 # Nuevo en 0.03 if keys[K_RIGHT]: # Nuevo en 0.03 rectanguloNave.left += 4 # Nuevo en 0.03 rectanguloMarciano.left += velocidadX rectanguloMarciano.top += velocidadY if rectanguloMarciano.left < 0 or rectanguloMarciano.right > ancho: velocidadX = -velocidadX if rectanguloMarciano.top < 0 or rectanguloMarciano.bottom > alto: velocidadY = -velocidadY pantalla.fill( (0,0,0) ) pantalla.blit(imagenMarciano, rectanguloMarciano) pantalla.blit(imagenNave, rectanguloNave) # Nuevo en 0.03 pygame.display.flip() pygame.quit()
Hay pocos cambios "de importancia":
- Necesitamos ciertos símbolos adicionales para acceder a las teclas, así que "importamos" otros componentes adicionales: from pygame.locals import *
- Podemos saber qué teclas está pulsando el usuario: keys = pygame.key.get_pressed()
- Y comprobar cualquiera de ellas en concreto (los códigos de las teclas recordarán a su nombre en inglés): if keys[K_LEFT]:
- Si queremos que se pueda mantener una tecla pulsada para que la "nave" se mueva de forma repetitiva, tendremos que permitir la repetición de teclado al principio de nuestro programa, indicando la pausa inicial (1 milisegundo si queremos que sea instantáneo) y la pausa antes de cada comprobación posterior de la tecla (por ejemplo, 25 milisegundos si queremos que se mueva 40 veces por segundo): pygame.key.set_repeat(1,25)
Y la imagen del "ufo", por si acaso la necesitas, puede ser ésta:
El resultado será poco mejor que en las entregas anteriores...