jueves, 19 de agosto de 2010

Evolut

(Descarga directa del script aqui)

Este script es el resultado de varios intentos que, al fin, han dado resultado. El propósito de Evolut es "crear" una especie y un hábitat para ella. Una vez se ha hecho esto, se deja evolucionar a la especie y, emulando la selección natural de Darwin, se potencian una características en detrimento de otras (por ejemplo, en un hábitat con muchos depredadores, lo importante no es ser el más fuerte, sino el más rápido - para poder escapar -. De este modo, los más rápidos sobrevivirán y sus hijos serán también muy rápidos. La agilidad media de la especie se incrementa.)
Así mismo, la relación entre hábitat y especie es autorregulable. Un ejemplo: hay un población de muchos individuos. Según pasa el tiempo, van agotando la comida. En determinado momento, ya no habrá comida para todos, lo que ocasionará que varios individuos mueran de inanición. Seguirán muriendo individuos hasta que queden suficientemente pocos como para que la comida se regenere y la población pueda crecer otra vez.


Una vez explicado el objetivo del script, voy a explicar su funcionamiento.

Hay dos clases fundamentales:

Cunajo (una variación de conejo inventada por mí =P) y Duma (nombre sacado del libro "Las Hijas de Tara", de Laura Gallego, y no de una cámara parlamentaria rusa).

La clase Cunajo contiene las variables y funciones que debe ejecutar un individuo de la especie:
- Comer, morir, luchar por la comida, escapar de los depredadores, etc.

La clase Duma contiene funciones y variables de carácter global, referentes a toda la población y no a un individuo concreto. Además, la Duma incluye dos clases más:

- La Sala: es donde se da la reproducción entre los cunajos
- El Campo: aquí comen, son cazados, luchan, etc.

Lo primero que hace la Duma es crear el entorno. Dentro de este proceso, lo más importante es crear el Campo, que en realidad es el hábitat en el que se mueven los cunajos. Para ello se vale de la función Crear_Campo(), que crea un hábitat aleatorio en cada ejecución del script: cambian los valores medio de riesgo (que regulan la depredación), cambian las cantidad iniciales de comida y la tasa de regeneración de la misma, etc.
De este modo, cada vez que se ejecuta el script, se crea un entorno distinto que conduce a que los cunajos evolucionen de una forma distinta.

La función más importante de la Duma es Pasar_Dia(). Esta función va "guiando" a los cunajos a lo largo de un día entero: les dice que vayan a comer, que vayan a reproducirse, que duerman.
A raíz de estos "mensajes", los cunajos actúan según sus propias funciones internas:

- Cuando los cunajos "van" a comer (en realidad no van a ningún sitio, estamos hablando de líneas de código =D) se fijan en si hay depredadores, si hay comida suficiente, etc, y actúan en base a la información que reúnen.

- Cuando van a reproducirse, primero miran a ver si les apetece, y si así es, van a la Sala.
La Sala tiene un papel bastante especial, pues es ella, y no los propios cunajos, quien empareja a los individuos y gestiona la reproducción y el nacimiento de los nuevos cunajos.


Nota: Algunas funciones del script están diseñadas para integrarse con Blender. Sin embargo, si se mantiene la variable global script_mode como igual a cero, estas funciones no se ejecutarán.
(si no se mantiene a 0, de hecho, el script ni siquiera funcionara)

Para descargar el Script, seguir este enlace








viernes, 30 de julio de 2010

Ragdoll en BGE

Aqui os dejo un enlace que os puede servir para entender bien lo que es un ragdoll si no lo sabeis:
Física ragdoll

Pues eso, os dejo con el tutorial.

Aqui el video: Tutorial Ragdoll en Youtube
Aqui el blend: Ragdoll.blend

Espero que os ayude, :)


MisterPompas

jueves, 29 de julio de 2010

Encriptador en Python

Descarga directa Aquí

Este script se dedica a encriptar textos y a desencriptarlos. Es fácil de usar, pero las opciones no están muy bien explicadas, así que las explico aquí.

Si se escribe 1 ó 11, se encripta un texto (el 11 utiliza un cifrado más sencillo pero algo menos fiable)
Si se escribe 2 ó 22 se desencripta un texto (aquí es indiferente cual se use)

-> Estas dos opciones no sirven de mucho, es como una demostración.

Para encriptar una frase a un fichero, escribir 1o (1 de cifrar y o de output). Entonces la frase se escribira cifrada en el fichero cifrado.txt

Para desencriptar una frase del fichero cifrado.txt, escribir 2i (2 de descifrar y i de input). entonces se escribe la contraseña y ya se desencriptó la frase.

-> Estas opciones sirven para encriptar algo corto (una contraseña encriptada o algo asi)

Para escribir texto encriptado a un fichero y desencriptarlo de él, pulsar e.

Alli se accede a otro menú.

En este menú, si se pulsa 1, se abre una ventana especial en la que se van encriptando muchas líneas a un fichero (no es recomendable hacer líneas muy largas).
Si se pulsa 2, se elije un fichero a desencriptar y otro de salida y desencripta el primero

[En este menu especial recomiendo leer las opciones y explicacion]

- El funcionamiento de la encriptacion se basa en supuesto sistema de discos giratorios (algo muy parecido a un criptex). Cada disco tiene 255 caras (una por cada caracter en ASCII), y van girando en base a ciertos patrones y a la contraseña. De esta forma, se obtiene un texto completamente distinto al original, y encima en caracteres ininteligibles, de modo que es muy dificil adivinar el algoritmo de encriptación.

Descarga directa Aquí

(No adjunto el código porque me es muy complicado adaptarlo a formato de espacios que exige blogger. Para ver el código no hace falta más que descargar el script)

Tal =)


miércoles, 14 de julio de 2010

Factorizar Número en Python

(Descarga directa del script aquí)

El script que voy a explicar ahora se encarga de expresar un número como un producto de números primos.

El script que voy a explicar ahora se encarga de expresar un número como un producto de números primos. Funciona para cualquier número - por grande que sea - aunque cuanto mayor es la longitud del número, más suele tardar.

A grandes ragos, el script funciona asi:


1) El programa tiene una lista interna de números primos

2) Intenta dividir el número que le indicamos (por ejemplo el 265) por cada uno de los números de esta lista , empezando por el más pequeño. (lo intenta con el 2, si no es divisible con el 3, etc)

3) Una vez encuentra el número primo más pequeño por el que es divisible el número (en este caso, el 5 es el número primo más pequeño por el que 265 es divisible) divide el primer número (265) entre el número primo (5), y obtiene un nuevo número (el 53 en este caso)

4)Vuelve al paso 2, pero utilizando el número obtenido en el paso anterior(el 53).

-> El programa finaliza este bucle cuando el número que obtenemos en el paso 3 es primo.(El 53 es primo, por lo tanto se detiene una vez lo obtiene, y nos muestra que 265 es igual a 5 * 53)

-> La lista inicial de números primos tiene hasta el 17, pero es muy probable que haga falta utilizar más números (En el caso anterior, hace falta ampliar la lista de números primos hasta el 53). Para ampliar esta lista, el programa usa la función "aniadir_primo".


Bueno, y aquí va el script:


# Writed in Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on win32.

# Factorizar un numero

numero = int(raw_input('Introduzca numero para factorizar : --> '))

def factorizar(numero): # Funcion principal
#print 'numero:',numero
num_ini = numero
num = num_ini
num_fact = ''
primos = [1,2,3,5,7,11,13,17]
# Con primos = [1,2] tambien funcionaria
seguir = True
while seguir:
if num ==1: # Se acabo la descomposicion
break
#print 'iteracion', primos[-1]
for primo in primos[1:]:
if num%primo == 0: # Si es divisible
num = num/primo
num_fact += str(primo)+'*'
break # Saltamos el for

# Si estamos aqui es que no es divisible entre los numeros de la lista que teniamos:
#hay que ampliar la lista.
primos = aniadir_primo(primos, num)
# Aqui volvemos a ejecutar todo el programa a ver si con la nueva lista conseguimos algo.
num_fact = num_fact[:-1]
print
print 'descomposicion factorial: ',num_fact
raw_input()

def aniadir_primo(primos, fin): # Funcion para añadir nuevos numeros primos
#print 'fin',fin
l_p = primos
# Establecer c
c = int(primos[-1])+1
while 1:
if es_primo(c, l_p):
l_p.append(c)
return l_p
if c == fin:
# Aqui no se que poner
return 'hola'
c += 1


def es_primo(num, primos): # Funcion que dado un número comprueba si es primo
l_p = primos[1:] # Para quitar el 1
for primo in l_p:
divisor = primo
cociente = float(num)/float(primo)
if cociente < divisor: return True # Si pasa esto es que ya no tiene
#sentido seguir dividiendo pues no me dara enteros, y por eso paro: es primo
if num%primo == 0: return False
return True

factorizar(numero)


Tal =)

martes, 13 de julio de 2010

Cambio Dia -- Noche


El Cambio Dia -- Noche es un proyecto que hice para un posible juego de rol. Como dice el nombre, se encarga de variar el color y la intensidad de las luces de un escenario con el fin de simular el dia, la noche y las transiciones entre ambos. Es muy facil de implementar en un proyecto en blender: solo hace falta copiar las tres lámparas que hay en el archivo.

El funcionamiento es muy simple. Hay una lámpara (tipo Hemi) que proporciona la iluminación global (esta lámpara no varía su intensidad a lo largo del día). Una lámpara Sun se encarga de variar la intensidad de la luz sobre el suelo del escenario y además crea las sombras del terreno. Una última lámpara Sun varía el color y la intensidad de la luz sobre el cielo, para dar la apariencia del amanecer, el mediodía, el atardecer y la noche.

Para variar la luz y el color sólo he utilizado unas cuantas curvas IPO para cada lámpara.


Descargar Aqui

Tal =)

domingo, 11 de julio de 2010

Python

Hola, soy Tal. Como aparte de videojuegos también se programar en Python, iré colgando algunos scripts que tengo, haciendo algún tutorial si se me ocurre un tema o si alguien me lo pide, etc.

Ya que es probable que no toda la gente que lea este blog sepa qué es Python, empezaré por explicarlo: Python es un lenguaje de programación orientado a objetos. Es, además, un lenguaje de alto nivel (para entendernos, es relativamente fácil de parender y bastante potente ).

Para aprender a programar en Python, hay muchos manuales, libros, etc. Aquí dejo los mejores:

+ http://diveintopython3.org/ (Muy bien documentado, pero en inglés)


Tal =)

Presentacion

Hola a todos, este blog esta destinado a dar a conocer nuestra organizacion: Soft Develop. Nos dedicamos principalmente a la realizacion de videjuegos, aunque tambien tenemos conocimientos de programacion y de diseño artistico, ya sea en 2D o en 3D.
Concretamente, el programa que usamos es Blender, que nos permite trabajar(si es esa la palabra adecuada) en la creacion de videojuegos y diseño grafico.

Los miembros que la integramos somos:
-Tal (programacion, modelado 3D)
-MisterPompas (logica de juegos, animaciones, el autor de este articulo :)
-Kable (photoshop, after effects)

Otra de nuestras intenciones es ayudar a cualquiera que necesite ayuda(claramente en alguno de los campos que dominamos, xP). Para preguntar dudas dejais un comentario y punto.