Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Goku jr on September 15, 2008, 10:06:51 PM

Title: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: Goku jr on September 15, 2008, 10:06:51 PM
Buenas,estaba intentando portar un pequeño juego (semi terminado) de fenix a bennu,y me compila perfectamente,pero a la hora de ejecutarlo,seme cierra rapidamente la ventana.

Aqui os dejo el codigo,no os asusteis que seguro que hay errores gravisimos.

[code language="bennu"]program the_war;
global     
//PARA GUARDAR DEMOS (YA SE VERA)//
struct demo;
byte direccion,findemo;
end   
//PARA GUARDAR LOS RECORD//
struct guardando;
int datos[10]; 
end   
//IDENTIFICADORES//
id_naves;
id_music;
id_main;
id_level;   
id_item;     
//sonidos
id_laser;
id_ex;
estado_programa=1;
ultimo_estado=0;
//musicas
music1;
music2;
music3;


//otros

puntos;
puntos2;
tokes1;
tokes2; 
nav1;
nav2;
id_count;
id_scr;
blok;
clan; 
paused;             
archivo_juego;   
//IDENTIFICADORESZ PARA GUARDAR DEMOS//
archivo_demo;
begin   
//full_screen=true;
graph_mode=mode_16bits;
id_main=load_fpg("gfx/main.fpg");
id_level=load_fpg("gfx/sce.fpg");
id_naves=load_fpg("gfx/naves.fpg");
id_count=load_fnt("gfx/count.fnt");
id_scr=load_fnt("gfx/scr.fnt");
id_item=load_fpg("gfx/item.fpg");
id_laser=load_wav("snd/laser.snd");
music1=load_song("data/menu.ogg"); 
music2=load_song("data/lev1.ogg");
music3=load_song("data/lev2.ogg");
archivo_demo=fopen("dmo/demo.dmo",demo);
 
//id_ex=load_wav("snd/ex.snd");
set_mode(640,480,16);
Loop
        if (ultimo_estado<>estado_programa)
           Switch (estado_programa);
               Case 1: titulo();  End
               Case 2: juego();  End               
               Case 3: record(); End             
               case 4: credits(); end   
               case 5: exit("",1); end
           End
           ultimo_estado=estado_programa;
      End     
        Frame;
    end   
    end


Process titulo();
Begin 
fade_on();
play_song(music1,-1);
    fade_on();
    put_screen(id_main,4);
    if(key(_enter));end
    put_screen(id_main,1);

   
   Loop
       
       
        If (key(_1)) estado_programa=2;break; End
        If (key(_2)) estado_programa=3;break;
        End
        If (key(_3)) estado_programa=4;break; End 
        if (key(_4)) estado_programa=5;break; end
        Frame;
    End
    End             
   
process juego();
begin                             
stop_song();
fade_off();
delete_text(all_text);
clear_screen();
level1();
end
process entrenamiento();
begin   
credits();
end
process record();
begin             
fade_off();
clear_screen();
fade_on(); 
put_screen(id_main,3);         
load("score.dat",guardando);
puntos=guardando.datos[0];
puntos2=guardando.datos[1]; 
tokes1=guardando.datos[2];
tokes2=guardando.datos[3];
write(id_scr,0,0,14,"PLAYER 1");
write(id_scr,0,50,14,"Puntuacion obtenida:");
write(id_scr,0,70,14,"ultimos golpes:");
write_int(id_scr,230,50,14,&puntos);
write_int(id_scr,180,73,14,&tokes1);
write(id_scr,350,0,14,"PLAYER 2");
write(id_scr,350,50,14,"Puntuacion obtenida:"); 
write(id_scr,350,70,14,"Ultimos golpes:");
write_int(id_scr,570,50,14,&puntos2);
write_int(id_scr,510,70,14,&tokes2);   
loop
if(key(_enter));estado_programa=1;delete_text(all_text);clear_screen();fade_off();break;end
frame;
end
end
                 
                 
                 
                           
/// AQUI SE COMIENZA LA CREACION DE LOS NIVELES ///



process level1();
begin
play_song(music2,-1);             
fade_on();
write(id_count,0,0,14,"PLAYER 1:");
write_int(id_count,160,0,14,&puntos);
write(id_count,410,0,14,"PLAYER 2:");
write_int(id_count,580,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2);
put_screen(id_level,1);
player1(120,200);
player2(410,120);
cajalife(120,300);
caja100(475,270); 

loop   
if(key(_esc));exit("",1);END
if(key(_f1));let_me_alone();savescore();tokes1=0;tokes2=0; clear_screen();fade_off();delete_text(all_text);level2();break;end                 
frame;
end
end                 
// FASE 2 //  15/08/2004/23:43:54
process level2();
begin               
stop_song();
play_song(music3,-1);
fade_on();                   
write(id_count,0,0,14,"Player 1:");
write_int(id_count,130,0,14,&puntos);
write(id_count,410,0,14,"Player 2:");
write_int(id_count,550,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2); 
player1(120,200);
player2(410,120);       
caja100(350,390);
cajalife(300,420);
loop 
if(key(_esc));exit("",1);END
if(key(_f2));let_me_alone();savescore();tokes1=0;tokes2=0;clear_screen();fade_off();delete_text(all_text);level3();break;end
frame;
end
end

//FASE 3//16/08/2004/16:12:47   
process level3();
begin 
fade_on();
write(id_count,0,0,14,"Player 1:");
write_int(id_count,130,0,14,&puntos);
write(id_count,410,0,14,"Player 2:");
write_int(id_count,550,0,14,&puntos2); 
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2);
player1(120,200);
player2(410,120); 
caja100(223,420);
cajalife(324,223);
loop   
if(key(_esc));exit("",1);END                               
if(key(_f3));let_me_alone();savescore();tokes1=0;tokes2=0;clear_screen();fade_off();delete_text(all_text);level4();break;end
frame;
end
end   

process Level4();
begin               
stop_song();
play_song(music2,-1);
fade_on();                   
write(id_count,0,0,14,"Player 1:");
write_int(id_count,130,0,14,&puntos);
write(id_count,410,0,14,"Player 2:");
write_int(id_count,550,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2); 
player1(120,200);
player2(410,120);       
caja100(400,320);
cajalife(334,220);
loop 
if(key(_esc));exit("",1);END
if(key(_f4));let_me_alone();savescore();tokes1=0;tokes2=0;clear_screen();fade_off();delete_text(all_text);level3();break;end
frame;
end
end

process level5();
begin               
stop_song();
play_song(music3,-1);
fade_on();                   
write(id_count,0,0,14,"Player 1:");
write_int(id_count,130,0,14,&puntos);
write(id_count,410,0,14,"Player 2:");
write_int(id_count,550,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2); 
player1(120,200);
player2(410,120);       
caja100(423,220);
cajalife(134,320);
loop 
if(key(_esc));exit("",1); END
if(key(_f5));let_me_alone();savescore();tokes1=0;tokes2=0;clear_screen();fade_off();delete_text(all_text);splashfinal();break;end
frame;
end 
end





/// AQUI COMIENZA LA CREACION DE LA NAVES QUE SE VERAN LAS CARAS //
process player1(x,y);         
begin   
             
file=id_naves;
graph=1;
write_int(0,120,0,14,&x);
write_int(0,120,10,14,&y);
loop                 
if(collision(type disparop2));puntos2=puntos2+10;tokes1=tokes1+1;end
if(tokes1>10)explosion(x,y);break;end
if(collision(type player2));explosion(x,y);break;end
if(key(_right))x=x+25;end
if(key(_left))x=x-25;end
if(key(_down))y=y+15;end
if(key(_up))y=y-15;end 
if (key(_enter) and blok==0)disparop1(x,y+0,0) ;play_wav(id_laser,0); blok=1; end
if (!key(_enter)) blok=0; end
//IF(KEY(_p));pausa();end 
//if(key(_space));sinpausa();end
frame;
end
end   
     
     
     
                         
process player2(x,y);
begin         
file=id_naves;     
graph=2;                 
loop     
if(collision(type disparop1));puntos=puntos+10;tokes2=tokes2+1;end
if(tokes2>10);explosion(x,y);break;end   
if(collision(type player1));explosion(x,y);break;end
if(key(_d))x=x+25;end
if(key(_a))x=x-25;end 
if(key(_s))y=y+15;end
if(key(_w))y=y-15;end   
if (key(_space) and clan==0)disparop2(x,y-10,180000)  ;play_wav(id_laser,0); clan=1; end
if (!key(_space)) clan=0; end   
frame;
end
end   
Process disparop1(x,y,angle);
Begin 
file=id_naves;
   advance(24);
    graph=3;
    While (NOT out_region(id,0))
        advance(16);
        Frame;
    End
End   
     
Process disparop2(x,y,angle);
Begin 
file=id_naves;
   advance(24);
    graph=4;
    While (NOT out_region(id,0))
        advance(16);
        Frame;
    End
End   

process explosion(x,y);
begin
file=id_naves;
from graph=5 to 9;frame;end
end

process savescore();
begin
//aki se comienza //
guardando.datos[0]=puntos;
guardando.datos[1]=puntos2; 
guardando.datos[2]=tokes1;
guardando.datos[3]=tokes2;
save("score.dat",guardando);
end


process caja100(x,y);
begin 
file=id_item;
graph=1;
loop
if(collision(type disparop1));puntos=puntos+100;explosion(x,y);break;end
if(collision(type disparop2));puntos2=puntos2+100;explosion(x,y);break;end         
frame;
end
end
       
process cajalife(x,y);
begin
file=id_item;
graph=2;
loop
if(collision(type disparop1));tokes1=tokes1-1;explosion(x,y);break;end
if(collision(type disparop2));tokes2=tokes2-1;explosion(x,y);break;end 
frame;
end
end       



//AQUI VA EL PROCESO DE LOS CREDITOS//

process credits();
private
fondo_map; 
textos[]=
        "PROGRAMADOR","Goku jr","",
        "GRAFISTAS","Goku jr","Dark man","Aunque este ultimo...",
        "SONIDOS","Goku jr","",
        "JUGABILIDAD","Eso lo direis los que jugais","",
        "AGRADECIMIENTOS","GRACIAS A TODO MUNDO",
        "EN ESPECIAL A...","LOS QUE HAN HECHO FENIX","",
        "LENGUAJE","FENIX";           
begin                                           
FADE_ON();
delete_text(all_text);
fondo_map=load_png("1.png");
put_screen(0,fondo_map);
   From y=0 To 19;
    write(id_count,320,40+y*20,4,textos[y]);   
    Frame;
End     
end   

//PROCESO PARA GUARDAR DEMOS //


// FIN DE LA ALPHA //



//CREANDO LA PAUSA//

process pausa();
begin
signal(type player1,s_freeze);
signal(type player2,s_freeze);
signal(type level1,s_freeze); 
signal(type level2,s_freeze);
signal(type level3,s_freeze);
signal(type caja100,s_freeze);
signal(type cajalife,s_freeze);
paused=write(id_count,280,150,14,"PAUSA");
loop
frame;
end
end   
process sinpausa();
begin         
delete_text(paused);
signal(type player1,s_wakeup);
signal(type player2,s_wakeup);
signal(type level1,s_wakeup); 
signal(type level2,s_wakeup);
signal(type level3,s_wakeup);
signal(type caja100,s_wakeup);
signal(type cajalife,s_wakeup); 
signal(type pausa,s_kill);
loop
frame;
end
end


process splashfinal();
begin   
clear_screen();
delete_text(all_text);
unload_fpg(id_level);
put_screen(id_main,4);
loop
frame;
end
end[/code]
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: SplinterGU on September 15, 2008, 10:18:34 PM
podrias tambien poner los graficos y sonidos?
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: Goku jr on September 15, 2008, 10:22:56 PM
Sip,aora lo subo a megaupload mismo.
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: Goku jr on September 15, 2008, 10:29:47 PM
Aqui esta :
http://www.megaupload.com/?d=YIA73UFT

Extraer en el mismo directorio donde tengas el prg.
Salu2!
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: SplinterGU on September 15, 2008, 10:35:21 PM
lo compilaste con -g y ejecutaste con -d, para ver donde cancelaba?
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: Goku jr on September 15, 2008, 10:42:50 PM
Parece que en la linea 57,al hacer un fopen
pero no se por que puede ser.

VALE...con borrar ese fopen parece funcionar

EDIT 2 : al darle a cualquiera de las opciones del menu, menos a creditos y salir,se queda la pantalla en negro y solo suena la musica
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: fr0d0b0ls0n on September 16, 2008, 08:24:08 AM
¿Por qué usas archivo_demo=fopen("dmo/demo.dmo",demo);?

Demo no lo seteas, así que puede tener valores raros por lo que veo. Usa o_write, o_read, etc.

Edit 1:

Mi consejo, no uses un proceso para cada nivel, usa algo estilo


process level(int nivel)
begin
       //Cosas comunes a todos los niveles
       switch (nivel)
               case 1:
                        //Cosas exclusivas nivel 1
               end
               case 2:

               end
       end
end
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: Goku jr on September 16, 2008, 09:30:19 AM
todo ese codigo en fenix funciona correctamente,ya he borrado el fopen, y funciona el menu del juego,ahora probare a hacer lo de los niveles.
Salu2!
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: fr0d0b0ls0n on September 16, 2008, 10:14:56 AM
Lo veo demasiado absurdo, pero... ¿has puesto los import de las funciones que uses? En el código que has pegado no están. Aunque sin ellos ni te compilaría, así que lo veo raro :P
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: SplinterGU on September 16, 2008, 10:51:30 AM
dudo realmente que eso funcione en fenix, y si lo hace lo hace mal...

fopen es para abrir un archivo y no para leer una estructura, demo es una estructura, y el 2do parametro del fopen debe ser un int y no un pointer... fijate en la wiki para mas ayuda... de los modos de apertura...

quizas lo que necesites usar ahi sea un load...

ahora si preguntas porque compila pasando un pointer cuando espera un int? es por las conversiones automaticas de tipo...
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: Goku jr on September 16, 2008, 11:09:43 AM
Vamos a ver jeje
el juego en fenix es completamente jugable.
olvidaos de lo del fopen demo,es una cosa que nunca implemente en el juego,la cuestion esque en bennu compila,pero se ejecutamal,y no se a q se debe.


Salu2!
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: SplinterGU on September 16, 2008, 11:34:09 AM
en principio se debe a eso... si hay algun otro problema lo desconozco, pero ese es el primero...
Title: Re: Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!
Post by: Goku jr on September 16, 2008, 11:57:41 AM
Vale,quitando eso,llega al menu, y despues de ahi,al pusar uno,funciona el primer nivel (eso a sido gracias a que he jitado los fade_off()) pero he quitado todos los fade_off de los niveles, y en los siguientes niveles no se muestran los mapas.

buuuf que lioo!