Genrando relampagos

Losersjuegos cuenta con una secciones de ejemplos en su web. Utilice esta sección para consultar o proponer ideas acerca de ellos.

Genrando relampagos

Notapor Barajas » Lun Oct 01, 2012 9:31 pm

Entre los efectos que existe para simular clima esta la lluvia, pero ¿Qué es una buena tormenta sin relámpagos?

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

#!/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 :roll: ), pero son bastante realistas hasta cierto punto :roll:
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Genrando relampagos

Notapor ClRg » Mié Oct 03, 2012 2:10 am

Lo estuve probando y me encanto! :D Como vos decís, es verdad que algunos parecen simplemente lineas, pero el efecto de "flash" que produce medio que ayuda a que se vea mas realista. Me imagino un juego de plataformas con esta ambientación de fondo, estaría genia! :D
“Lo mejor de los booleanos es que si te equivocas estás a un sólo bit de la solución correcta.”
— Anónimo
Avatar de Usuario
ClRg
 
Mensajes: 22
Registrado: Lun Mar 07, 2011 6:25 pm

Re: Genrando relampagos

Notapor Barajas » Mié Oct 03, 2012 7:41 am

ClRg escribió:Me imagino un juego de plataformas con esta ambientación de fondo, estaría genia! :D


No lo había visto de esa forma... pero suena interesante :)
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am


Volver a Ejemplos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado