<-- Back to list of examples

""" 
 Show how to use a sprite backed by a graphic.
 
 Sample Python/Pygame Programs
 Simpson College Computer Science
 http://programarcadegames.com/
 http://simpson.edu/computer-science/

"""
import pygame
import random

# Definimos algunos colore			s
NEGRO = (0, 0, 0)
BLANCO = (255, 255, 255)
ROJO = (255, 0, 0)

# ESta clase representa a la pelota        
# DEriva de la clase "Sprite" en Pygame
class Bloque(pygame.sprite.Sprite):
    
    # LEER ANTES DE USAR:
    # Este constructor te permite usar cualquier gráfico:
    # mi_sprite = Bloque("cualquier_grafico.png")
    # Pero si NO quieres ninguno, usa los siguientes:
    '''
    def __init__(self):
        pygame.sprite.Sprite.__init__(self) 

        self.image = pygame.image.load("my_graphic.png").convert()

        # Hacemos que el fondo sea transparente. Ajusta a BLANCO si tu
        # imagen de fondo es blanca.
        self.image.set_colorkey(NEGRO)

        self.rect = self.image.get_rect()
    '''
    def __init__(self, nombre_de_archivo):
        # Llamada al constructor de la clase padre (Sprite)
        super().__init__() 

        # Crea una imagen del bloque y la rellena con un color.
        # También podría tratarse de una imagen guardada en disco.
        self.image = pygame.image.load(nombre_de_archivo).convert()

        #Hacemos que el fondo sea transparente. Ajusta a BLANCO si tu
        # imagen de fondo es blanca.
        self.image.set_colorkey(NEGRO)

        # Extraemos el objeto rectángulo que posee las dimensiones de la imagen.
        # DEfiniendo los valores para rect.x y rect.y, actualizamos la posición de este
        # objeto
        self.rect = self.image.get_rect()

# Inicializamos Pygame
pygame.init()

# Definimos el largo y alto de la pantalla
ancho_pantalla = 700
alto_pantalla = 400
pantalla = pygame.display.set_mode([ancho_pantalla, alto_pantalla])

# Esta es una lista de todos los 'sprites.' Cada bloque en el programa es
# añadido a esta lista. La lista es gestionada por la clase llamada 'Group.'
listade_bloques = pygame.sprite.Group()

# Esta es una lista de cada sprite, así como de todos los bloques, incluído el del protagonista.
listade_todoslos_sprites = pygame.sprite.Group()

for i in range(50):
    # ESto representa un bloque
    bloque = Bloque("alien.png")

    # Definimos una ubicación aleatoria para el bloque
    bloque.rect.x = random.randrange(ancho_pantalla)
    bloque.rect.y = random.randrange(alto_pantalla)
    
    # Añadimos el bloque a la lista de objetos
    listade_bloques.add(bloque)
    listade_todoslos_sprites.add(bloque)
    
# Creamos un bloque protagonista con una imagen de disco
protagonista = Bloque("ufo.png")
listade_todoslos_sprites.add(protagonista)

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

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

puntuacion = 0

# -------- Bucle Principal del Programa -----------
while not hecho:
    for evento in pygame.event.get(): # El usuario hizo algo
        if evento.type == pygame.QUIT: # Si el usuario hizo click sobre el botón de salida
            hecho = True # Anunciamos que hemos acabado y abandonamos el bucle

    # Limpiamos la pantalla
    pantalla.fill(BLANCO)

    # Obtenemos la posición actual del ratón. Esto devuelve la posición como
    # una lista de dos números.
    pos = pygame.mouse.get_pos()
    
    # Extraemos de la lista las coordenadas x e y,
    # tal como si extrjéramos letras de una cadena de texto.
    # Colocamos al objeto protagonista sobre la posición del ratón.
    protagonista.rect.x = pos[0]
    protagonista.rect.y = pos[1]
    
    # Observamos si el bloque protagonista ha colisionado contra algo.
    listade_impactos_bloque = pygame.sprite.spritecollide(protagonista, listade_bloques, True)  
    
    # Comprobamos la lista de colisiones.
    for bloque in listade_impactos_bloque:
        puntuacion += 1
        print(puntuacion)
        
    # Dibujamos todos los sprites
    listade_todoslos_sprites.draw(pantalla)
    
    # Limitamos a 60 fps
    reloj.tick(60)

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

pygame.quit()