Por eso, diseñe este miniejemplo de lluvia con relámpagos

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pygame
from random import *
ANCHO = 320
ALTO = 320
#una simple gota de lluvia...
class Gota():
def __init__(self, pos, vel):
self.x, self.y = pos
self.dy = vel
def update(self):
self.y += self.dy
if self.y > ALTO:
self.y = 0
self.x = randrange(1,ANCHO-1)
def dibuja(self,pantalla):
pantalla.set_at((self.x,self.y),(200,200,200))
#esta clase genera el relámpago como si fuera un árbol con hijos aleatorios...
class nodorayo():
def __init__(self,pos,recorrido):
self.x, self.y = pos
self.recorrido = recorrido
#un máximo de 3 hijos...
num_hijos = (randrange(1,12-recorrido)%3)
self.hijos = []
#recorrido nos marca la profundidad que tendrá el árbol...
if self.recorrido > 0:
for i in xrange(num_hijos):
self.hijos.append(self.genera_hijo())
self.cont = 0
def genera_hijo(self):
posx = self.x+randrange(ANCHO/10)*choice([-1,1,-2,2])
posy = self.y+ALTO/10
return nodorayo((posx,posy), self.recorrido-1)
def dibuja(self, pantalla):
for hijo in self.hijos:
pygame.draw.aaline(pantalla,(0,0,250),(self.x,self.y),(hijo.x,hijo.y),5)
pygame.draw.aaline(pantalla,(250,250,250),(self.x,self.y),(hijo.x,hijo.y),1+self.cont)
hijo.dibuja(pantalla)
#el siguiente if es para poder dibujarlo por fases
#if self.cont > 1:
# hijo.dibuja(pantalla)
self.cont+=1
def main():
pygame.init()
screen = pygame.display.set_mode((ANCHO,ALTO))
pygame.display.set_caption("Relámpagos")
delay_frames = (1000/25)
hacer = 1
#para la lluvia...
lluvia = []
for i in xrange(ANCHO):
g = Gota((randrange(1,ANCHO-1),randrange(1,ALTO)),randrange(12,15))
lluvia.append(g)
for i in xrange(10):
for gota in lluvia:
gota.update()
#un relámpago...
relampago = nodorayo((randrange(ANCHO),0),10)
cont = 0
while hacer:
pygame.time.delay(delay_frames)
for event in pygame.event.get():
if event.type == pygame.QUIT:
hacer = 0
screen.fill((0,0,0))
#esto crea a los relámpagos...
if cont < 2:
screen.fill((200,200,200))
if cont < 16:
relampago.dibuja(screen)
if cont > 30:
cont = 0
#cada 30 ciclos se genra un nuevo rayo....
relampago = (nodorayo((randrange(ANCHO),0),10))
#esto actualiza y dibuja las gotas de lluvia...
for gota in lluvia:
gota.update()
gota.dibuja(screen)
cont+=1
pygame.display.update()
pygame.quit()
main()
Mostraría una imagen... pero los relámpagos son muy rápidos XD
Solo creo que debo comentar el hecho de que no todos los relámpagos generados son increíbles (algunos parecerán una simple linea

