<-- Back to list of examples

"""
Sample Python/Pygame Programs
Simpson College Computer Science
http://programarcadegames.com/
http://simpson.edu/computer-science/
"""

import pygame

# Definimos algunos colores
NEGRO = (0, 0, 0)
BLANCO = (255, 255, 255)

# Esta clase representa la protagonista        
# Se deriva de la clase "Sprite" en Pygame
class Protagonista(pygame.sprite.Sprite):

    joystick_cuenta = 0
    
    # Constructor. Pasa el color del bloque así como la posición x, y
    def __init__(self):
        # Llama al constructor de la clase padre (Sprite)
        super().__init__() 

        # Variables para almacenar el alto y largo del bloque
        largo = 20
        alto = 15

        # Crea una imagen  de la protagonista y la rellena de color-
        # También podría ser una imagen guardada en disco.
        self.image = pygame.Surface([largo, alto])
        self.image.fill(NEGRO)

        # Extrae el objeto rectángulo con las dimensiones de la imagen
        self.rect = self.image.get_rect()
        
        # Establece la posición inicial del sprite en 100,100
        self.rect.x = 100
        self.rect.y = 100
        
        # Cuenta los joysticks conectados al ordenador
        self.joystick_cuenta = pygame.joystick.get_count()
        if self.joystick_cuenta == 0:
            # No hay joysticks!
            print ("Error, no he podido encontrar ningún joystick.")
        else:
            # Usa el joystick #0 y lo inicializa
            self.mi_joystick = pygame.joystick.Joystick(0)
            self.mi_joystick.init()
        

    # Actualiza la posición de la protagonista
    def update(self):
        # Mientras exista un joystick
        if self.joystick_cuenta != 0:
        
            # Esto obtiene la posición del eje del controlador de juego
            # Devuelve un número entre -1.0 y +1.0
            horiz_axis_pos = self.mi_joystick.get_axis(0)
            vert_axis_pos = self.mi_joystick.get_axis(1)   
            
            # Desplaza x en función del eje. Multiplicamos por 10 para acelerar el 
            #movimiento.
            self.rect.x = self.rect.x+horiz_axis_pos*10
            self.rect.y = self.rect.y+vert_axis_pos*10


pygame.init()
    
# Establece el alto y largo de la pantalla
dimensiones = [700,500]
pantalla = pygame.display.set_mode(dimensiones)

# Iteramos hasta que el usuario pulse sobre el botón de salida.
hecho = False

# Lo usamos para gestionar cuán rápido se actualiza la pantalla.
reloj = pygame.time.Clock()

# Esta es una lista de los 'sprites.' Cada protagonista en el programa (solo hay 1) es
# añadida a la lista. La lista es gestionada por la clase 'Group.'
lista_detodoslos_sprites = pygame.sprite.Group()

# Esto representa la protagonista controlada por el protagonista.
protagonista = Protagonista()

# Añadimos la protagonista a la lista de objetos controlados por el protagonista
lista_detodoslos_sprites.add(protagonista)

# -------- Bucle Principal -----------
while not hecho:
    for evento in pygame.event.get(): 
        if evento.type == pygame.QUIT:
            hecho = True 

    # Limpiamos la pantalla
    pantalla.fill(BLANCO)

    # Actualizamos la posición de la protagonista (usando el ratón) y dibujamos la protagonista
    lista_detodoslos_sprites.update()
    lista_detodoslos_sprites.draw(pantalla)

    # Limitado a 60 fotogramas por segundo (fps)
    reloj.tick(60)

    # Avanzamos y actualizamos la pantalla con todo lo que hemos dibujado
    pygame.display.flip()

# Sé bueno con el IDLE 
pygame.quit()