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()







