el codigo esta comentado en lo maximo posible para ser legible a los novatos (los que empieza desde 0)
- Código: Seleccionar todo
#******************************************************************************
# nieve.py: mini juego que simula una nevada.
#
# Histortial:
# 0.0.1: todo el framework es creado
# 0.0.2: se implementa una funcion generadora de posiciones y velocidades
# aleatorias para las bolitas de nieve.
# 0.0.3: se implementa la posibilidad de pausar la simulacion con la
# tecla ENTER.
# 0.1.0: se agrega la posibilidad de optar por el modo fullscreen u modo
# ventana y este historial.
#
# Por Shackra para los chicos de losersjuegos.com.ar
# From Dreams To Games - Studios
#******************************************************************************
import pygame
from pygame.locals import *
import random
def gennieve(lista):
""" generea posiciones aleatorias par la nieve """
valoresx = []
# generemos una lista de valores aleatorios
for i in range(0, 5):
valoresx.append(random.randrange(0, pygame.display.get_surface().get_width()/2, 1))
for i in range(0, 5):
valoresx.append(random.randrange(pygame.display.get_surface().get_width()/2, pygame.display.get_surface().get_width(), 2))
# lo mas aleatorio posible sin complicarnos
random.shuffle(valoresx)
#print "lista random generada: {0}".format(valoresx)
# posicion para X y Y
posxy = [random.choice(valoresx), random.randint(-1, 0)]
# velocidades para X y Y
velxy = [random.randint(0, 1), random.randint(1, 2)]
lista.append([posxy, velxy])
nieve = []
RESOLUCION = (800, 600)
tiempo = pygame.time.Clock()
GRIS = (127, 127, 127)
BLANCO = (255, 255, 255)
ROSADO = (255, 192, 203)
NEGRO_A = (0, 0, 0, 64)
pygame.display.set_mode(RESOLUCION)
pygame.display.set_caption("nieve! :: FDTG - S T U D I O S ")
quit = False
pausa = False
pausa_screen_copy = None
pausa_screen_black = pygame.Surface(RESOLUCION)
pausa_screen_black.convert()
pausa_screen_black.set_alpha(64)
pygame.font.init()
texto = pygame.font.Font(None, 45)
texto_d = texto.size("Pausa")
texto_s = texto.render("Pausa", True, BLANCO)
pausa_screen_black.blit(texto_s, (RESOLUCION[0]/2 - texto_d[0]/2, RESOLUCION[1]/2 - texto_d[1]/2))
print "\n\nteclas disponibles:\nENTER: pone/quita la pausa\ntecla F: pone/quita el fullscreen (solo en linux!)\
\ntecla ESC: termina la \"simulacion\" de nieve sin retrasos en ipython o python ;)"
print "\nprueba (o ejemplo?) realizado por Shackra para los chicos de losersjuegos.com.ar"
print "From Dreams To Games - Studios"
print "apuesto que el siguiente post es del gran hugoruscitti ;)"
while not quit:
tiempo.tick_busy_loop(120)
for evento in pygame.event.get():
if evento.type == QUIT:
quit = True
elif evento.type == KEYDOWN:
if evento.key in [K_ESCAPE]:
quit = True
elif evento.key == K_RETURN:
if not pausa:
pausa = True
# copiamos lo que hay dibujado en la pantalla antes de hacer la pausa
pausa_screen_copy = pygame.display.get_surface().copy()
else:
pausa = False
elif evento.key == K_f:
pygame.display.toggle_fullscreen()
### comprobacion del estado de pausa ###
if pausa:
# si hay pausa...
# dibujamos lo que habiamos copiado, muy listo no?
# aunque tambien podemos blitear las bolitas de nieve
# en sus posiciones actuales, sin modificar estas con
# la velocidad que ellas llevan. pero a mi me gusta asi =)
pygame.display.get_surface().blit(pausa_screen_copy, (0, 0))
# una sexy cortinita negra pegadita a la piel de la pantalla
# con un estampado que dice "Pausa", ideal para dejar volar
# la imaginacion del jugador xD.
pygame.display.get_surface().blit(pausa_screen_black, (0, 0))
else:
# si no es asi, pues... que siga la simulacion! =)
gennieve(nieve)
pygame.display.get_surface().fill(ROSADO)
# actualizemos todas las posiciones de todas las bolitas de nieve
for i in nieve:
# posicion de x + velocidad de x
i[0][0] = i[0][0] + i[1][0]
# posicion de y + velocidad de y
i[0][1] = i[0][1] + i[1][1]
# podria hacer de la manera corta +=, pero me da perecita hacerlo! :D
# variemos la posicion de x
if random.randint(0, 2) <1>= pygame.display.get_surface().get_width():
nieve.remove(i)
elif i[0][1] >= pygame.display.get_surface().get_height():
nieve.remove(i)
# por ultimo dibujemos todas las bolitas de nieve :)
pygame.draw.circle(pygame.display.get_surface(), BLANCO, (i[0][0], i[0][1]), 3)
pygame.display.flip()
# para ipython es necesario usar exit(), si no fuera asi nos dejaria en la shell de python
# y eso me molesta =(.
exit()