Shit Ant Simulator

Started by Danielo515, April 06, 2011, 02:38:34 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

Bueno, el que me conozca un poco ya le sonará mi obsesión de hacer programas inútiles, cuyo único atractivo reside en dejar que se ejecute y mirarmlo hasta que te aburras cual idiota. No se porqué, pero es lo que me divierte.

El caso es que ahora estoy intentando (de manera muy cutre) simular una "especie" de hormiguero. Digo especie porque de momento no tiene ninguna lógica ni ningún objetivo. Ahora mismo solo quiero hacer funcionales algunas funciones (valga la redundancia)

Aquí abajo teneis el código de la antz. De momento su comportamiento es completamente aleatorio. Ahora mismo lo primerísimo que quiero resolver es el problema con el terreno deformable. Quiero que las hormigas no puedan atravesar, a no ser que caben el espacio blanco. Además quiero que caminen de una forma creible, ahora mismo cuando llegan a un agujero "caen" cuando se supone que lo que deberían hacer es recorrerlo. He conseguido que más o menos cuando caminan sin un rumbo fijo, salgan de los agujeros de una forma un poco coherente, pero me gusstaría mucho mejorar ese aspecto, si alguien me puede ayudar dándome consejos o documentación sobre como comportarse ante terrenos deformables lestaría eternamente agradecido. Bueno, ahi dejo el código.


Bueno, ya voy por la versión 0.3.1 0.3.2

Ahora mismo tiene errores bastante frustrantes y tan pronto se tira 3 horas funcionando sin problemas como que crashea a los 5 minutos.

De momento no se han repetido dos hormigueros, y estoy probando varias configuraciones de las constantes que producern hormigueros completamente distintos. Aquí os dejo algunas capturas de como son los hormigueros que se producen actualmente


UPDATE 13 Abril 2011

Gracias al código que me ha pasado cierta persona, llamémosle F.Mind, no es demasiado obvio, Mejor Free M. La hormiguita (porque de momento con varias se va todo al traste) ya saca la tierrecita y la va amontonando al lado de su casita, (ita ita ita), y para muestra un botón. A ver si corrijo los fallos que tiene hasta ahora y la subo.

Un saludazo!


Fede

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Danielo515

De momento no merece tal calificación. Dejémoslo en la basurilla que es ahora, pero va avanzando gracias al soporte de este foro. Gracias a todos! (en especial a splinter  ;) )

Danielo515

 A ver si alguien me ayuda un poco con el tema de los túneles.

Ahora mismo es más o menos aleatorio con ciertos condicionantes. Alguien puede darme algunos consejos para "incitarlas" a hacer los túneles más o menos largos? es que ahora mismo me salenmas bien "cuevas"

FreeYourMind

Gracias (en especial a fede).

Danielo515

Gracias a todos! XD

Tengo ciertos problemas con como lo tengo planteado.

Ahora mismo las hormigas tienen un 30% de probabilidades de ir a la misma dirección donde se cabó el último agujero y cabar en la misma dirección. El problema es que me salen agujeros muy "verticales", y cuando ya son bastante profundos solo se dedican a ensancharlos.

¿Ideas de como obligar a expandirse en más direcciones? Y que no ensanchen tanto los túneles.

Danielo515

Voy a adjuntar la primera release del proyecto a ver si viendolo todo completo alguien se anima a hecharme una mano.


Fede

#7
Ahora si. El anterior prg me daba error en un gráfico llamdo "hormiga". :D

Por cierto, había un juego que se llamaba 'sim ant' de los sim de toda la vida. :D

Por cierto, me he perdido en la conversación. En especial cuando Free me da las gracias.  ???

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Fede

¿As probado a tratar el hormiguero como un ente?

Me parece que tratas a cada hormiga indepedientemente y aleatoriamente.

Un hormiguero no se porta así. Cuando hay que hacer algo se hace, no se hace un trozo.

Deberías enfocar el programa a órdenes del estilo:

Hacer un tunel de tantos.

Hacer una cueva.

Mover terreno.

etc.

Y añadir un componente aleatorio en lo derecho que está el tunel, lo redondo que será la cueva, etc.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Danielo515

Hombre fede, ahora sí que te tenemos que dar las gracias XD, aunque ya solo por comentar te las habías ganado.

El caso es que si trato al hormiguero como un ente me van a salir siempre las mismas... ¿cosas? Aunque es una idea excelente para darle homogeneidad.

Ya he cambiado algunas cosas en el código y ahora funciona mucho mejor. Tal como está implementado no sería muy difícil hacer un especie de "cerebro" que tomase decisiones aleatorias, pero con un objetivo mayor, es decir, en vez de hacer un agujero, hacer un tunel de 10, por ejemplo, y dar órdenes para que luego, las hormigas (eso sí de forma independiente) las fueran ejecutando con cierto componente aleatorio, que sería lo que le daría ese puntillo de rand.

Si, conozco el sim ant, pero su interfaz se me hace un poco engorrosa, aunque tal vez lo vuelva a jugar para "inspirarme"

Fede

También hay muchos videos de National Geographics. :D

Lo que te he explicado es lo que más o menos he aprendido de la "2". :D

A simple vista las hormigas tienen un comportamiento caótica, pero si las observamos como un todo son un 'ente' altamente especializado.

¿Que tal hacer un terrario estilo tamagotchi?

Podrías hacer un 'simulador' de juego de un terrario, donde vas observando a las hormigas, les ayudas dádodole de comer, recursos, etc. e interactuas con ellas.

Si te lo curras puedes poner obejtivos para conseguir más recursos, etc.

Por dar ideas, que no quede. :D

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

SplinterGU

si esto, es el ejemplo del path_find que vi ayer, yo no usaria la path_find para hacer los tuneles, yo haria lo siguiente.

- tengo hormiguero.
- tengo hormigas en la superficie.
- establezco la entrada del homiguero (punto de partida) (aca tambien creo una tabla de puntos de entrada)
- uso un randomico de X pixels hacia abajo+laterales del hormiguero/tierra (podemos agregar arriba si ya estamos bajo el hormiguero), a partir del punto de partida, y este seria el destino, hasta aca usaria un algoritmo de rectas.
- hacemos el tunel de a 1 pixel (o a unidad de ancho que representemos es el ancho) segun el punto anterior, ese granito de tierra que sacamos lo tenemos que poner en la superficie, asi que nos movemos hasta la entrada, aca si, usando path_find.
- luego nos movemos hasta donde habiamos dejado el tunel anteriormente y seguimos cavando y moviendo los pedazos de tierra que sacamos a la superficie 1 a 1, hasta llegar al destino calculado.
- una vez llegado al destino, y este punto lo agregaria a una tabla de nodos (a partir de los cuales se van a hacer los nuevos tuneles). Esta tabla puede ser un historico de los ultimos N destinos, asi se evita tener 1000 tuneles sobre el mismo nodo, o no.
- una vez que una hormiga se libera de cavar un tunel, busca en la tabla destinos anteriormente mencionada a partir de que nodo hara su nuevo tunel, y aca usa path_find. la hormiga solo se libera, cuando llego a destino y luego de sacar el grano de tierra a la superficie.
- si un nodo esta siendo usado, ese nodo se bloquea para que otra hormiga no cave en el mismo nodo.
- solo se puede cavar hacia lugares con tierra, no tiene sentido hacer un tunel en el aire.

yo en principio haria eso, luego iria depurando mejor el metodo, pero basicamente podria funcionar asi.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Jolin splinter, debo estar volviendóme mejor programador porque yo había pensado algo así (aunque aún no he conseguido que funcione correctamente).

Básicamente elijo un punto objetivo y un punto de partida, y como tu bien has dicho, calculo la dirección hacia la que cabar con un simple cálculo de rectas. Todo esto lo hace un proceso independiente al que he llamado cerebro. Este proceso pone los objetivos en unas tablas que las hormigas consultan cuando les viene en gana para ver la lista de objetivos y hacerlos.

Vamos, todo lo que has dicho tu, pero peor explicado, pero sin reservarle el tunel a ninguna hormiga en concreto. A ver que consigo sacar.

Danielo515

#13
Puff, esto se me está complicando más de lo que esperaba.

Voy a quedar en ridículo por lo oxidado de mis matemáticas, pero no se como aplicar las ecuaciones de la recta a este problema.

Dados dos puntos debemos calcular cual será el siguiente punto que debemos alcanzar. Esto he pensado que se podría hacer teniendo la pendiente.

pendiente=y2-y1/x2-x1

Pero no se luego como aplicar el resultado.

Una vez que tengo la pendiente, si se supone que avanzo de 4 en 4, ¿que debería hacer? Ir al primer punto  y una vez allí multiplicar la pendiente por el valor de avance e ir al punto que resulte?

Que cutre me siento  :P


Olvidadlo, creo que ya tengo una forma, aunque no esta resultando todo lo bien que esperaba.

Danielo515

Nada, creo que estoy atascado.

Tengo varios problemas a la hora de implementarlo:

1. Establecer un objetivo para las ormigas. No se si debería ser uno global o uno para cada una, aunque no todas decidirán buscar un objetivo

2. Empezar los túneles. Ahora mismo pongo un límite de túneles, y le doy a cada hormiga un porcentaje de probabilidad de empezar uno.
3. Llegar al objetivo. Puede parecer una chorrada, pero me está costando llegar a los objetivos. Ahora mismo lo que hago es, si la x y la y son menores, avanzar reduciendolas, y cuando uno ya está alineado solo circula en el sentido del otro. Pero llega un punto en el que se atasca, ya que no puede seguir cabando debido a que el último punto al que llega lo considera vacío, y no avanza.

Pero no os debanéis los sesos hoy. Mañana más fresco y mejor haré mejores preguntas después de replantearme todo esto.

Un saludo.