Consulta sobre juego que estoy realizando para el curso de BennuGD

Started by crashon182, April 22, 2013, 04:15:13 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

crashon182

Hola amigos les hago una consulta de un juego que estoy realizando para el curso en vídeo de bennugd. En el mismo quiero hacer una replica (básica) del juego Duck Hunt de NES (para afianzar el conocimiento de animaciones y mouse).
ahora bien, tengo un problema deseo que en caso de que no haya mas patos en pantalla me muestre un cartel. utilice la funcion !exists pero no me muestra nada, quería ver si me podían ayudar.


adjunto código fuente: http://www.4shared.com/rar/IByuD8ss/codigo-duckhunt.html





import "mod_grproc";
import "mod_proc";
import "mod_text";
import "mod_key";
import "mod_mouse";
import "mod_video";
import "mod_map";
import "mod_screen"
import "mod_rand"
import "mod_timers";




global
   fichero;
   tiempo;
   
process main()
private
string da="diagonalA";
string dd="diagonalD";
int id1,id2;
end


begin
set_mode(640,480,32);
set_mode(640,480,32);
fichero = load_fpg("animacion.fpg");
put_screen(fichero,13);


id1=tirapato(da);
if (!exists(TYPE tirapato ))
      write(0,150,150,4,"FIN");
   end   
mira();
end


process muerepato(x,y)


begin
   graph=10;
loop
   graph=11;
   y+=5;
   if (y>300)
         signal(ID,S_KILL);
      break;
   end   
   frame;
end


end


//proceso que lanza los patos con diferentes movimientos!
process tirapato(string direccion)
private
int id1,id2;
end
begin


   if (direccion=="diagonalA")
      movpato(0,295,3,3,7,9);
   end   
   if (direccion=="diagonalD")
      movpato(15,45,3,0,7,9);
   end   
   frame;
end


//proceso principal que maneja al pato
process movpato(x,y,int incx,int incy,int grafico,int totgrafico)
private
//variables que manejan la orientacion del pato.
int arriba=0;
int derecha=0;


end
begin
   graph=grafico;


//FLAGS = 3;


controlTiempo(id);   
   loop
     
      angle=180000-45000;
      if (x<0)
         derecha=0;
      end
      if (derecha==0)
         x=x+incx;
         FLAGS=3;
      end   
     
      if (x>620)
         derecha=1;
         FLAGS=2;
      end
      if (derecha==1)
         x=x-incx;
      end   
     
      if (y<0)
         arriba=0;
      end   
      if (arriba==0)
      y=y+incy;
      end
      if (y>300)
         arriba=1;
      end   
      if (arriba==1)
         y-=incy;
      end   
      graph+=1;
      if (graph>totgrafico)
         graph = grafico;
      end   
     
     
   // ME fijo si le doy al pato!
   if (mouse.left and collision(TYPE mouse))
         graph=10;
         muerepato(x,y);
         signal(ID,S_KILL);
   end     
      frame;
   end
end


//proceso que permite controlar el tiempo en que el pato se visualiza
process controlTiempo(int idpato)
private
   tiempoRestante=3;
end


Begin
   timer[0]=0;
   write_var(0,100,100,4,tiempo);
   loop


      tiempo = tiempoRestante-(timer[0]/100);
      if (tiempo==0 and exists(idpato))
         patoseva(idpato,father.x,father.y);
         timer[0]=0;
     
      end   
      frame;
   end   
end   
//proceso que maneja el pato cuando se llega a l tiempo limite   
process patoseva(int identificador,x,y)
begin
   graph=4;
   loop
      signal(identificador,S_KILL);
      y-=4;
      graph+=1;
      if (graph>6)
         graph = 4;
      end   
      frame;
   end
end
//proceso que maneja la mira del jugador
process mira()
begin
mouse.file=fichero;
mouse.graph=12;
loop
x=mouse.x;
y=mouse.y;


   frame;
end   
end
         


[/size][size=78%]saludos!! y muchas gracias!![/size][/code]
www.elbooz.com.ar - Cursos online Gratuitos!

Erkosone

Vaya, yo he hecho un remake de este juego, mucho animo jeje, el mio me salió una replica exacta al original, si necesitas el source para ojearlo puedo pasártelo, está en otro lenguaje pero vaya.. es completamente entendible por un programador de bennu y puede que te de alguna idea.
Si lo quieres mirar avisa y te lo paso.

KeoH

yo en vez de !exists ... usaria get_id(type pato) ... si retorna 0 es que no hay mas procesos de tipo pato

crashon182

Hola KeoH, he utilizado Get_id, pero tampoco me funciona, lo coloco dentro del proceso tirapato quedando:




process tirapato(string direccion)
private
int id1,id2;
end
begin


if (direccion=="diagonalA")
movpato(0,295,3,3,7,9);
end
if (direccion=="diagonalD")
movpato(15,45,3,0,7,9);
end
if (get_id(TYPE movpato)==0)
write(0,150,150,4,"FIN");
end
frame;
end
[size=78%]


tambien lo he colocado dentro del process main pero tampoco funciona. Gracias también [/size]Erkosone pero el gran problema que tengo es sobre la existencia de procesos en BennuGD, seguramente en otros lenguajes será distinto este tema.
saludos!!
[/size]
www.elbooz.com.ar - Cursos online Gratuitos!

SplinterGU

debes usar get_id en un loop sin frame... en cada frame, get_id se reinicia.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

crashon182

disculpa splinter, pero entonces donde debería colocar la instrucción ? perdona pero no entiendo... cualquier cosa adjunte el código fuente si es necesario para verlo.
saludos!
www.elbooz.com.ar - Cursos online Gratuitos!