Pygame 3, Usando el teclado.

Hola a tod@s, como he comentado en anteriores post, vamos a volver a pygame, este módulo capaz de gestionar juegos en python, doy por sentado que os habéis mirado los anteriores post relacionados con pygame.



Bueno, nos quedamos poniendo una imagen de fondo, creando un pingüino y haciendo que se moviera automáticamente por pantalla, esta vez vamos a ir un poquito mas allá, vamos a controlar dicho pingüino con el teclado como en cualquier juego normal, antes de nada, vamos a poner el código que llevamos hasta ahora:




#!/usr/bin/python


#importamos modulos
import sys
import pygame
from pygame.locals import *

#definimos constantes

altura=640
anchura=480



def main():

 #variables locales

 x=550
 y=220
 #iniciamos pygame
 pygame.init()
 #creamos una ventana
 ventana=pygame.display.set_mode((altura, anchura))
 #definimos un titulo para la ventana
 pygame.display.set_caption("probando pygame...")

 #cargamos imagenes
 fondo=pygame.image.load("fondo.jpg").convert()
 tux=pygame.image.load("tux.png").convert_alpha()
 
 
 #loop del juego
 while True:
  x-=1
  y+=1
  
  ventana.blit(fondo, (0, 0))
  ventana.blit(tux, (x, y))
  pygame.display.flip()
  #posibles entradas del teclado
  for eventos in pygame.event.get():
   if eventos.type==pygame.QUIT:
    sys.exit()




if __name__=="__main__":
 main()



Para gestionar el teclado usaremos el método key.get_pressed()


teclado=pygame.key.get_pressed()

Lo que hacemos es asignar al identificador "teclado" el nombre de la tecla que estamos pulsado para después compararla a través de "if", para moverlo, hacemos como en el anterior post, "jugar" con los valores de x e y.


  if teclado[K_RIGHT]:
   x+=1
   ventana.blit(tux, (x, y))

  if teclado[K_LEFT]:
   x-=1
   ventana.blit(tux, (x, y))
  if teclado[K_UP]:
   y-=1
   ventana.blit(tux, (x, y))
  if teclado[K_DOWN]:
   y+=1
   ventana.blit(tux, (x, y))

Cada tecla tiene un nombre diferente, en este caso son solo cuatro:

K_RIGHT: Flecha derecha
K_LEFT: Flecha izquierda
K_UP: Flecha arriba
K_DOWN: Flecha abajo

Entonces si añadimos este último código a lo que ya teníamos en el anterior post, se nos queda algo así:


#!/usr/bin/python


#importamos modulos
import sys
import pygame
from pygame.locals import *

#definimos constantes

altura=640
anchura=480



def main():

 #variables locales

 speed=1
 x=550
 y=220

 #iniciamos pygame
 pygame.init()
 #creamos una ventana
 ventana=pygame.display.set_mode((altura, anchura))
 #definimos un titulo para la ventana
 pygame.display.set_caption("probando pygame...")

 #cargamos imagenes
 fondo=pygame.image.load("fondo.jpg").convert()
 tux=pygame.image.load("tux.png").convert_alpha()
 
 
 #loop del juego
 while True:
  teclado=pygame.key.get_pressed()
  if teclado[K_RIGHT]:
   x+=speed
  if teclado[K_LEFT]:
   x-=speed
  if teclado[K_UP]:
   y-=speed
  if teclado[K_DOWN]:
   y+=speed
  
  ventana.blit(fondo, (0, 0))
  ventana.blit(tux, (x, y))
  pygame.display.flip()
  #posibles entradas del teclado
  for eventos in pygame.event.get():
   if eventos.type==pygame.QUIT:
    sys.exit()




if __name__=="__main__":
 main()

Cuando lo ejecutéis podréis observar que podemos mover el pingüino con las flechas de dirección libremente por la pantalla, que ya no anda por su cuenta, si no que lo movemos nosotros.





Con la variable "speed" se puede cambiar la velocidad del pingüino.

Si queréis todas las teclas para usar con la función key.get_pressed(), entrad a la página oficial de Pygame desde aquí

Hasta el siguiente tutorial, un abrazo a tod@s.


3 comentarios:

Unknown dijo...

Lo explicas muy bien . me sacaste unas cuantas dudas!
Espero algun dia poder hacer un juego como la imagen del anterior post.
Espero que sigas posteando mas!

Francisco Dominguez Lerma dijo...

Gracias Ignacio.

En cuanto a lo de hacer un juego como en la foto del anterior posts, pues la verdad es muy dificil, ya que tendríamos que crear un motor para que gestione el sistema de baldosas o cojer uno ya hecho...
Pero bueno, como poder se puede, poco a poco.

Un abrazo a tod@s.

Unknown dijo...

Hola!...
Todo Funciona muy bien... tengo un programa y al hacer el QUIT me manda un error, me podrias explicar a que se debe, igual si pongo el sys.exit() me manda una traza de error.