Angle no me funciona como deberia

Started by Abram, March 31, 2011, 08:24:29 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Abram

Ah por supuesto ^^ si consigo que el algoritmo funcione ya le aplicare graficos bonitos xD lo primero es la funcionalidad, ya he conseguido que el proceso se llame recursivamente pero se forma unos lios cuando hay muchos enemigos alrededor que pa que xD... a seguir investigando toca :P

Drumpi

Para hayar la distancia de un punto a otro tienes FGET_DIST ;)
Aunque no sé si esa solución es la respuesta que buscabas :P
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Abram

Jaja gracias por la sugerencia, pero me temo que es algo mas complejo que todo eso xD puede salir algo muy curioso de aqui si consigo hacerlo sin que me explote la cabeza, la cosa es que por el mapa hay repartidas celulas que se pueden contagiar por asi decirlo, entonces el proceso prota se inicia en el centro, desde ahi calcula cuales estan a menos de por ejemplo 100 pixeles, creandose tantos protas como celulas haya cerca (si hay 4 por ejemplo, saldran 4 protas cada uno buscando a una) lo gracioso de todo esto es que una vez llegado cada uno a su celula, desde ese punto, vuelve a buscar si hay otra vez X celulas a menos de 100 pixeles, volviendose a crear tantos protas como celulas haya, y asi continuamente hasta que esten todas ocupadas, lo cual crea un efecto grafico muy bonito pero un algoritmo enrevesado de narices xD

Abram

Wiiii he depurado el codigo y la cosa empieza a ser funcional ^^ solo una preguntilla... hay alguna manera de mirar desde un proceso el estado de otro (si esta congelado, dormido, etc...)? Gracias!

SplinterGU

yo agregue la funcion get_status(id)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Abram

Como no splinter, eres un crack!! en nada subo el codigo mas depurado, crea unos efectos muy curiosos ^^ con este algoritmo bien implementado y unos graficos resultones puede salir algo bastante guay ^^

Abram

#36
[code language="bennu"]
program Microbios;

/////////// variables globales ///////////
global
   int idcelula[79];
   int contador_celulas;
end

//////////// PROCESO PRINCIPAL /////////////
process main()
private
   contador_celulas;
end
begin
   set_mode(640,480,32);
   set_fps(30,0);
   set_title("Microbios");
   rand_seed(time());
   
   for(contador_celulas=0;contador_celulas<20;contador_celulas++)
      idcelula[contador_celulas]=celula(rand(100,600),rand(100,400));
   end
   distancia(320,240);
   while(!key(_esc))
      frame;   
   end
   exit();
end

////////// PROCESO PARA MANEJAR LAS BOLITAS QUE IRAN PILLANDO CELULAS, AQUI ESTA TODA LA CHICHA XD ////////////
process prota(x,y,numid)

begin
   graph=new_map(10,10,32);//map_clear(0,graph,rgb(0,255,0));
   drawing_map ( 0 , graph );
   drawing_color(rgb(0,255,0));
   draw_fcircle (5,5,4);
   resolution=100;
   x *=100;
   y *=100;
   
   signal(idcelula[numid],s_freeze); //Lo congelamos para avisar a otros procesos prota y que no vayan a buscar esta misma celula
   
      while( !collision(idcelula[numid]) && exists(idcelula[numid]))
      
         angle=get_angle(idcelula[numid]);
         advance(100);
         put_pixel(x/resolution,y/resolution,rgb(0,255,0));
         frame;
      end
      x=idcelula[numid].x;
      y=idcelula[numid].y;
      if(exists(idcelula[numid]))
         bolafija(x/100,y/100);
      end
      signal(idcelula[numid],s_kill);
      say("PROTA");
      
      distancia(x/100,y/100);
end

////////// BOLA QUE SE QUEDARA FIJA EN LA CELULA CUANDO PROTA HA LLEGADO ///////////
process bolafija(x,y)
begin
   graph=father.graph;
   drawing_map ( 0 , graph );
   drawing_color(rgb(255,0,0));
   draw_fcircle (5,5,4);
   loop
      frame;
   end
end


//////////// PROCESO QUE CALCULA SI LAS CELULAS ESTAN A "X" DISTANCIA DE LAS BOLITAS //////////////
process distancia(x,y)
private
   i, distmin, dista, idcelatack;
end
begin
   graph=new_map(10,10,32);//map_clear(0,graph,rgb(0,255,0));
   drawing_map ( 0 , graph );
   drawing_color(rgb(255,128,0));
   draw_box (0,0,10,10);
   
   distmin=100; //Distancia minima en pixeles en los que se buscaran celulas

   loop
      while(idcelula && i<80)
         dista=get_dist(idcelula);
         if(dista<=distmin and dista>0 && get_status(idcelula)!=4)
            prota(x,y,i);
         end
         i++;
         frame;                     
      end
      angle=(angle+2500)%360000;
      frame;
   end   
end

///////////////////// BOLITAS QUE PUEDEN SER INFECTADAS //////////////////////
process celula(x,y)
begin
   resolution=100;
   x *=100;
   y *=100;
   //write(0,x/resolution,y/resolution,7,x);
   graph=new_map(10,10,32);
   drawing_map ( 0 , graph );
   drawing_color(rgb(125,125,125));
   draw_fcircle (5,5,4);
   loop
      frame;
   end
end


[/code]

No me lo puedo creer, funcionaaaa :D y va fino fino xDD, ale, para el que lo quiera probar ^^ modificando la variable distmin podemos decirle al programa a cuantos pixeles a la redonda quieres que busque celulas (circulos grises) y cambiando el contador_celulas del FOR del main podemos poner un numero mayor para apreciar mejor el efecto (no mas de 80, que lo tengo programado asi porque en el juego habra 80 celulas xD) ya me direis como queda ^^

AHora lo mas divertido, implementarlo al proyecto que tengo en mente =) hay que cambiar muchas cosas guarras como el cuadrado ese que gira xD.. la verdad es que lo puse asi para ver visualmente que el proceso habia llegado a ese fragmento del codigo xD

SplinterGU

esta bueno, yo lo modificaria para que el que solo sean alcanzados por la celula mas cercana... me incomoda que habiendo una celula a 5 pixels infectada, esta sea infectada por otra que esta a 50 pixels
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

estoy como un idiota dandole y dandole a ver que images forma...

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

Abram

Jajaja pues si, aun hay que refinarlo ^^ lo importante es que no crashea, ahora toca mejorarlo, para eso que tu dices tendre que tocar el proceso que calcula las distancias, para que llame al prota solo en caso de que sea la mas cercana, a ver como me lo monto, gracias por tu ayuda ;)

Abram

Compara el proceso distancia de antes con el de ahora, que dolor de cabeza!! sigue haciendo algo raro pero ahora lo hace mucho mas bonito jajaja.. solo hay que esperar a que timer valga 500 para poder hacer click en cualquier parte del programa, y ahi comenzaran a infectarse las celulas, con esta base y unos graficos resultones intentare desarrollar algun juego entretenido, gracias por la ayuda ^^

SplinterGU

no hace falta agradecer...
vamos a ver...

gracias por compartir y karma por el curro.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Sólo por el hecho de tu primer programa funcionando, mereces karma :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Fede

¿Aqui se reparten karmas?

Aquí va el mio. :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.

Abram

Jaja muchas gracias gente, una comunidad muy acogedora sin duda :P me encanta este lenguaje, en una par de dias, y una vez con el algoritmo funcionando, no me ha costado nada implementarlo en un minijuego bastante divertido, el lenguaje es muy amena y hace esto de programar divertido, en breve me vereis por la seccion de Proyectos jaja, sin duda este verano voy a pasarmelo en grande ^^

Gracias de nuevo a todos, y en especial a Splinter y mz por su ayuda, aun estoy algo verde :P