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 (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]
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.
yo en vez de !exists ... usaria get_id(type pato) ... si retorna 0 es que no hay mas procesos de tipo pato
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]
debes usar get_id en un loop sin frame... en cada frame, get_id se reinicia.
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!