<-- Back to list of examples
"""
# Sample Python/Pygame Programs
# Simpson College Computer Science
# http://programarcadegames.com/
# http://simpson.edu/computer-science/
"""
import pygame
import random
# Definimos algunos colores
NEGRO = (0, 0, 0)
BLANCO = (255, 255, 255)
ROJO = (255, 0, 0)
# Esta clase representa la pelota.
# Deriva de la clase "Sprite" en Pygame.
class Bloque(pygame.sprite.Sprite):
# Constructor. Pasa el color del bloque,
# así como su posición x,y
def __init__(self, color, largo, alto):
# Llamada al constructor de la clase padre (Sprite)
super().__init__()
# Creamos una imagen del bloque y la rellenamos de color.
# También se podría emplear una imagen guardada en disco.
self.image = pygame.Surface([largo, alto])
self.image.fill(BLANCO)
self.image.set_colorkey(BLANCO)
pygame.draw.ellipse(self.image, color, [0,0, largo, alto])
# Extraemos el objeto rectángulo que posee las dimensiones de la imagen.
# Estableciendo los valores rect.x e rect.y, actualizamos la posición de este objeto.
self.rect = self.image.get_rect()
# Inicializamos Pygame
pygame.init()
# Establecemos el alto y largo de la pantalla
largo_pantalla = 700
alto_pantalla = 400
pantalla = pygame.display.set_mode([largo_pantalla, alto_pantalla])
# Esta es una lista con los 'sprites.'Cada bloque en el programa es
# añadido a la lista. La lista es gestionada por la clase llamada 'Group.'
listade_bloques = pygame.sprite.Group()
# Esta es una lista de cada sprite. En ella están todos los bloques, incluido el del protagonista.
listade_todolos_sprites = pygame.sprite.Group()
for i in range(50):
# Esto representa un bloque
bloque = Bloque(NEGRO, 20, 15)
# Establecemos una ubicación aleatoria para el bloque.
bloque.rect.x = random.randrange(largo_pantalla)
bloque.rect.y = random.randrange(alto_pantalla)
# Añadimos el bloque a la lista de objetos.
listade_bloques .add(bloque)
listade_todolos_sprites.add(bloque)
#Creamos un bloque protagonista ROJO
protagonista = Bloque(ROJO, 20, 15)
listade_todolos_sprites.add(protagonista)
# Iteramos hasta que el usuario haga click sobre el botón de salir.
hecho = False
#Se usa para establecer cuan rápido se actualiza 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 pincha sobre cerrar
hecho = True # Anuncio que hemos terminado por lo que abandonamos el bucle
# Limpiamos la pantalla
pantalla.fill(BLANCO)
# Obtenemos la posición actual del ratón. Nos la devuelve como
# una lista de dos números.
pos = pygame.mouse.get_pos()
# Extraemos de la lista los valores de x e y,
# tal como si extrajéramos letras de una cadena de texto.
# Situamos al objeto protagonista en la ubicación del ratón.
protagonista.rect.x = pos[0]
protagonista.rect.y = pos[1]
# Observamos por si el bloque protagonista ha colisionado contra algo.
lista_impactos_bloques = pygame.sprite.spritecollide(protagonista, listade_bloques , True)
# Comprobamos la lista de colisiones
for bloque in lista_impactos_bloques:
puntuacion += 1
print(puntuacion)
#Dibujamos todos los sprites
listade_todolos_sprites.draw(pantalla)
# Limitamos a 20 fps
reloj.tick(20)
# Avanzamos y actualizamos la pantalla que ya hemos dibujado.
pygame.display.flip()
pygame.quit()