Compilar perfectamente,pero se cierra la ventana nada mas ejecutarse!

Started by Goku jr, September 15, 2008, 10:06:51 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Goku jr

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]

SplinterGU

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



SplinterGU

lo compilaste con -g y ejecutaste con -d, para ver donde cancelaba?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Goku jr

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

fr0d0b0ls0n

¿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
Follow the Moeko Principle

FAETON - En Progreso
15 Criaturas de ~28 |  18 Hechizos de ~41
25 Buffs de ~50      |  19 Enfrentamientos de ~80

Goku jr

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!

fr0d0b0ls0n

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
Follow the Moeko Principle

FAETON - En Progreso
15 Criaturas de ~28 |  18 Hechizos de ~41
25 Buffs de ~50      |  19 Enfrentamientos de ~80

SplinterGU

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...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Goku jr

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!

SplinterGU

en principio se debe a eso... si hay algun otro problema lo desconozco, pero ese es el primero...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Goku jr

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!