Spore 2D (Animalicos)

Started by Windgate, May 17, 2009, 05:17:32 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

laghengar

#30
Yo he añadido dos líneas a cada proceso de animalicos

LOOP
      vida--;
      alimento--;
      if(x%5==0)<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IF (num_animalicos[tipo]<max_animalicos[tipo])
      IF (collision(type verde) AND (alimento>hambre[tipo]/2))
         IF (rand(0,DADO_REPRODUCCION)<reproduccion[tipo])



IF (ID_colision=collision(type azul))
         signal(ID_colision,S_KILL);
         size=size+crecimiento[tipo];
         alimento++;
      END
      end<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IF ((vida<=0) OR (enfermedad>contagio[tipo]) OR (alimento<0))
         BREAK;
      END
      FRAME;

//////////////////////////////////

Me va muy bien. Analicen los resultados... si quieren claro, un saludo.

Lo malo que tiene es que deforma el comportamiento, pero en rendimiento funciona muy bien.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

Quote from: DCelso on May 19, 2009, 09:19:39 PM
Sois unos monstruos, killo me quedo anonarado con lo que sabeis, no sé de qué diablos hablais pero suena a complejo que te cagas.

Yo imaginaba que era feo, pero no para tanto...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Aca esta el sistema que comente... no me gusta el hecho de que demora mucho la compilacion si incrementamos la cantidad de celdas... pero bueno, vere cual es la causa...

La diferencia de velocidad es muy notable, y el efecto/comportamiento me encanta...

le quite el tema del tamaño, y tambien agregue cosas como cantidad maxima a comer por frame y otras cosas mas...

vamos a ver si lo podemos mejorar mas aun...

enjoy it...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

aca da una dispersion mejor de la fauna... y se mantiene bastante estable...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Arg, voy a echarle un vistazo Splinter, yo había metido ya un tablero con funciones para posicionar/eliminar animalicos de él, funciones para alimentarse de los posibles animalicos adyacentes e incluso la tabla que indica cuáles se alimentan de cuáles, se rellena aleatoriamente y a veces hay caníbales xDDD

Voy a ver qué cosa has hecho, nos estamos comiendo con las nuevas versiones, mañana subiré también la mía que ahora estoy que me duermo, debo llevar más de 12 horas frikeando con Bennu el día de hoy, tenía la tarde libre :o

Laghenghar, eso que pones sin duda multiplica el rendimiento x5 a costa de ligeras imprecisiones, pero la solución final es usar un tablero y prescindir de collision() para este tipo de videojuegos con "superpoblación" de procesos.

Lo dicho, demasiadas versiones para probar, me alegra que estén disfrutando de este ecosistema, en ocasiones me quedo embobado viendo cómo los animalicos se reproducen, comen y se contagian de cosas malas ;D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Windgate

looooool

Impresionante la mejora de rendimiento SplinterGU, lástima que estamos programando algo muy parecido, sólamente que yo estoy separando las FUNCTION que hacen uso del tablero en un módulo llamado tablero.prg, mi matriz es de IDs (Menos dimensiones) y no he aplicado aún distinción entre adultos y pequeñuelos... En cualquier caso ambas cosas prometen.

Mañana sigo adelante con ello, hoy no me siento capaz de más, no nos separemos demasiado con este proyecto que al final van a salir varios juegos distintos xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

¿En qué consiste el juego?¿En ver cómo se comen los unos a los otros? :D
Vaya rollo de juego más que juego es salvapantallas :D

Si se necesitara buscar pareja para la reproducción quizás se podría hacer que uno de ellos fuera el protagonista del juego y moverlo para evitar ser comido y buscar reproducirse :D.

No obstante está muy currado y su código es muy didáctico.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

Lo mio es experimental... y a modo didactico, mi idea es colaborar con diferentes tecnicas que puedan ser aplicadas a sus juegos...

El tema con el collision y con el get_id, no es realmente por las operaciones en si... sino por la cantidad de procesos... actualmente bennu cuando usan estas funciones pasandoles por parametro "tipo", recorren toda la lista de procesos (1 a 1), chequean si corresponden al tipo correcto y cuando lo encuentra hace la comprobacion... entonces el numero anterior de 1,048,576 debemos multiplicarlo al menos por 3 dando como resultado 3,145,728 chequeos sobre la lista de procesos en cada frame.

NOTA: El tipo de dato correspondiente a "mapa_mundo" puede/debe ser modificado en base al maximo numeros de individuos posibles por expecies... por eso en este caso use char.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

#38
Te doy la razón windgate, lo que puse yo es una chapuza, me gusta mucho más lo que hace splinter, este tema me interesa yo me encontré con lo mismo.

Es posible que sea necesario crear una matriz global 8x8, que determine las influencias entre los distintos colores, así luego con un solo collision se podrían hacer las acciones de cada animalico.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

splinter_work

Quote from: laghengar on May 20, 2009, 11:13:45 AM
Te doy la razón windgate, lo que puse yo es una chapuza, me gusta mucho más lo que hace splinter, este tema me interesa yo me encontré con lo mismo.

Es posible que sea necesario crear una matriz global 8x8, que determine las influencias entre los distintos colores, así luego con un solo collision se podrían hacer las acciones de cada animalico.

Armate un ejemplo del modelo de la matriz 8x8... a ver que tal sale...

Windgate

La matriz 8x8 ya la tengo en mi versión y como ya dije, se rellena aleatoriamente, indicando quiénes pueden comerse, salen hasta caníbales a veces. Pero collision es IN-VI-A-BLE, se trata de NO usarlo, nunca, ¡Jamás! Al menos para este juego xD

Splinter, tengo problemas con las nuevas variables PUBLIC.

Si tengo una variable:

GLOBAL
   animalico prueba;    //Recordemos que prueba tiene los campos: tipo, edad y alimento

Cuando ejecuto una instrucción:

   prueba.tipo=0;        //Ponemos un 0 en el campo tipo de la variable prueba

Tengo un error de ejecución... En cambio si declaro la misma variable como PRIVATE de un proceso animalico no tengo ese problema...

La idea que tenía era una matriz global de tipo animalico, pero con una única variable ya me da problemas. Será que todavía no entiendo bien el uso de las public...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

splinter_work

prueba tiene que contener previamente el id del proceso al que vas a acceder...

prueba = id;

por otro lado, creo que tipo 0 no es valido.

Probaste la version que puse yo?

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Probé tu versión, pero en tu versión no llegas a hacer uso de la variable de tipo animalico que declaras como PRIVATE en el proceso, por eso estaba con la duda de lo que se puede y lo que no se puede hacer.

Tu versión por supuesto es sublime y muy muy eficiente, pero eché de menos poder mandar signal a los procesos cuando alguien se come a alguien...

Por lo que me dices: Veo que si creo una matriz de tipo animalico, debo meter en ella IDs de proceso antes de poder consultar nada... Yo intentaba meter -1 en el tipo para indicar que todos los "huecos" de la matriz estaban libres al principio (En el comentario anterior había puesto un 0 para que se entendiera mejor el problema que tenía).

Simplemente al principio quería una matriz vacía, y a medida que los animalicos comprueban que hay "hueco" en ella van metiendo sus IDs... Lo veo viable, otra cosa es que Bennu lo permita...

En cualquier caso mañana seguiré haciendo pruebas, y gracias por todo Splinter, me estás ayudando mucho.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Windgate

Bien, ya tengo lista la matriz de animalicos y ya comprendo la "magia" de declare y public. Ahora mismo prescindo ABSOLUTAMENTE del uso de la función collision()

El rendimiento ha mejorado notablemente, no obstante tengo que hacer mejoras diversas de eficiencia, ya que los chequeos sobre la matriz son realmente exhaustivos, puede haber hasya 64 animalicos en cada celda, y para comer/contagiarse/reproducirse cada animalico evalúa esos 64 animalicos.

La idea será que cuando comen/contagian/reproducen satisfactoriamente dejan de evaluar la matriz, espero un rendimiento de +50%...

También tengo que arreglar muchos accesos a father e incluso a father.father, que se hacen varias veces en la misma función e imagino que será mucho más eficiente almacenar el ID de father.father al principio y trabajar con el ID en lugar de con father.father...

Me leo y suena bastante paranoide... En cuanto tenga lista la versión la subo, con canibalismo incluído, y pronto introduciré simbiosis e incluso especies capaces de "convertir" un animalico a su especie.

Gracias SplinterGU, mil gracias por todo xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es