Buenas a todos!
Llevo con esto desde div2,pero nunca he completado un juego completo,y siempre se me aparecen errores muy tontos,pero que no consigo solucionar sin ayuda! jeje
A ver si me podeis ayudar!
Resulta que estoy haciendo una especie de matamarcianos(si el tipico juego) y quiero poner unos pequeños escuadrones de enemigos,pues bien
tengo algo de que cuando se matan a por ejemplo 4 enemigos en pantalla,aparecen los siguientes y asi,pero no se que pasa que llega un momento que no aparecen.
El codigo que ejecuta esa fase es este :
[code language="bennu"]process Nivel1();
begin
nivel=1;
vidas=3;
puntos=0;
play_song(musnivel,1);
file=fnivel1;
write(0,590,10,0,"Puntos:");
write_int(0,700,10,0,&puntos);
write(0,10,10,0,"Vidas:");
write_int(0,50,10,0,&vidas);
start_scroll(0,fnivel1,1,1,0,2);
prota();
//escuadron 1
numenemigo=4;
cuqui_level1(155,140);
cuqui_level1(345,110);
cuqui_level1(545,290);
cuqui_level1(445,90);
loop
scroll[0].y0=scroll[0].y0-7;
//escuadron 2
if(numenemigo==8);
cuqui_level1(55,140);
cuqui_level1(245,100);
cuqui_level1(545,190);
cuqui_level1(745,90);
end //A partir de este escuadron no me aparecen mas!
//escuadron 3
if(numenemigo==12);
cuqui_level1(155,140);
cuqui_level1(345,110);
cuqui_level1(545,290);
cuqui_level1(445,90);
end
//escuadron 4
if(numenemigo==16);
cuqui_level1(155,140);
cuqui_level1(145,210);
cuqui_level1(545,290);
cuqui_level1(445,290);
cuqui_level1(255,240);
cuqui_level1(345,110);
cuqui_level1(545,290);
cuqui_level1(445,190);
end
if(numenemigo==16);signal(type cuqui_level1,s_kill); break;
end
frame;
end
end[/code]
A partir del 3 escuadron no me aparecen mas escuadrones! decir que numenemigo, es una variable que cada vez que eliminas a un enemigos suma +1.
de todas maneras aqui os dejo el juego compilado para que lo probeis! junto con el codigo fuente!
http://www.megaupload.com/?d=IEX9NDXG
Gracias de antemano!
sera por esto?
//escuadron 4
if(numenemigo==16);
cuqui_level1(155,140);
cuqui_level1(145,210);
cuqui_level1(545,290);
cuqui_level1(445,290);
cuqui_level1(255,240);
cuqui_level1(345,110);
cuqui_level1(545,290);
cuqui_level1(445,190);
end
if(numenemigo==16);signal(type cuqui_level1,s_kill); break;
o sea, cuando es 16, lanzas 5, para acto seguido matarlos.
nop,por eso no es,sigue sin funcionar! gracias de todas maneras!
el problema esta en que tenes cantidad de cucarachas exponencialmente, primero porque lanzas el menu 5 veces, y cuando pulsas enter estas lanzando 5 veces el juego, y luego se va incrementando e incrementando e incrementando porque no tenes ningun flag que diga que ya lanzaste, o sea, cuando numemigo es 8, lanzas 4, al siguiente frame, sigue siendo 8, lanzas otros 4 enemigos y asi infinitamente.
compila con -g, agregar el mod_debug y luego en el juego hace alt+c y pone show numenemigo
pulsa nuevamente alt+c y anda viendo como incrementa
tambien podes pulsar f2 para ver la cantidad de procesos que estan corriendo.
saludos.
Gracias voi a probar!
Gracias! eso solucionado, lo malo esque ahora no desaparecen las cucas al morir,si que salen los escuadrones,pero no desaparecen xDD ya digo soy muy noob.seguire investigando y si no volvere a pedir ayuda! gracias!!!
Vale,solucionado tambien,ya desaparecen las cucas,y y numenemigo cuenta bien,hasta que aparece el siguiente escuadron y wala! numenemigo se vuelve loco,y la verdad esque no encuentro la razon,sospecho que tiene que ver algo parecido a lo anterior o algun loop o algo,veremos!
Subo el codigo fuente a ver :
usa la consola de debug y con F2 ves las cantidad de procesos.
Quote from: SplinterGU on November 03, 2010, 11:14:34 PM
usa la consola de debug y con F2 ves las cantidad de procesos.
Jejeje si,lo que pasa que pulso F2 y en mi portatil se desactiva el wifi y en la consola no me aparece nada!
f2 solo desactiva el wifi? o en combinacion con otra tecla?
yo digo, que en la consola pulses solo f2, sin combinacion con nada.
Solo pulsando f2 sin combinacion ni nada!
Para muestra una imagen :
(http://img259.imageshack.us/img259/3269/shotg.png)
Lo del modo debug apenas lo he usado, algún día tendría que echarle un vistazo... Imagino que el manual de Osk tendrá apuntados todos sus secretos :D
Quote from: Goku jr on November 03, 2010, 11:35:36 PM
Solo pulsando f2 sin combinacion ni nada!
Para muestra una imagen :
(http://img259.imageshack.us/img259/3269/shotg.png)
con la ventana asi como la tienes, pulsa F2, si te fijas abajo esta el help, si pulsas shift aparecen otras opciones, si pulsas alt otras y si pulsas control otras. eso significa que en conjuncion con las teclas que presiones las de funcionn tienen efecto diferente, pero con F2 solamente aprece la lista de procesos que estan corriendo.
Escribiendo help+(intro) salen indicadas las funciones básicas.
Esta consola es imprescindible para debug, pues con F2 (o escribiendo "instances" muestra el árbol de procesos con su ID y estado, y luego podemos ver las variables (globales, locales o privadas) escribiendo su nombre (precedido del ID o nombre del proceso en el caso de privadas o públicas), usar show para ver la variable en tiempo real al cerrar la consola, modificar los valores de las variables, etc...
Para lo único que no sirve es para cuando el programa se cierra sin más (para eso está SAY) o cuando tenemos un array largo, una struct grandecita, o se usan punteros :P
Vale,ya solucione si usar la consola!!
Jeje,resulta que donde tengo :
[code language="bennu"]if(numenemigo==numeroenemigo)
signal(type cuqui_level1,s_kill); // faltaba esto al principio de cada escuadron!
cuqui_level1(55,140);
cuqui_level1(245,100);
cuqui_level1(545,190);
cuqui_level1(745,90);
end[/code]
//tenia que matar al los procesos anteriores,si no aunque desaparecieran de pantalla seguian activos!! como veis un error muy muy tonto!
Gracias por la ayuda de todas maneras!
Buenas de nuevo!
Ya tengo algo que se le puede llamar "juego" xD hasta me entretiene cuando lo pruebo
Bueno sigo teniendo algun que otro problema,tambien relaccionado con los escuadrones
tengo el proceso Cuqui_level2(x,y,size)
que es este :
[code language="bennu"]process cuqui_level2(x,y,size);
private
golpescuca2=4;
begin
file=fene2;
graph=1;
loop
if(rand(300,3)<10);PLAY_WAV(LASERCUCAS1,0); dis_cuqui1(x,y); end
if(COLLISION(type disparo_prota));puntos=puntos+2;golpescuca2=golpescuca2-1;end
if(golpescuca2==2);y=y+3;end
if(golpescuca2==1);y=y+5;end
if(golpescuca2==0);numenemigo=numenemigo+1;explosion_cucas(x,y);break;end
if(y>615);numenemigo=numenemigo+1;break;end
FRAME;
end
end[/code]
En el proceso de la cuca2 vereis que conforme se le van restando golpes el valor de Y incrementa y se lanzan en kamikaze contra el protagonista.
Hasta ahi bien.
Pues cuando sale el Segundo escuadron mis disparos surgen efecto,sumo puntos,pero las cucas ya no responden ni se avalanzan contra mi,ni se destruyen.
Este es el proceso del nivel 2 :
[code language="bennu"]process Nivel2();
begin
signal(type menu_principal,s_kill); //Mata los procesos inecesarios
SIGNAL(TYPE finalboss1,S_KILL);
signal(type prota,s_kill);
signal(type deja_caer,s_kill);
signal(type cucon1,s_kill);
numenemigo=0;
energia=energia;
puntos=puntos;
play_song(musnivel,0);
prota();
deja_caer(x,y);
cucon1(300,100);
write(fonthud,10,530,0,"Puntos:");
write_int(fonthud,160,530,0,&puntos);
write(fonthud,560,530,0,"Energia:");
write_int(fonthud,740,530,0,&energia);
start_scroll(0,fnivel2,1,2,0,2);
//ESCUADRONES NIVEL 2 -------------------------------------------------------------------------------------
cuqui_level2(10,260,50);
cuqui_level2(120,260,50);
cuqui_level2(230,260,50);
cuqui_level2(350,260,50);
cuqui_level2(460,260,50);
cuqui_level2(580,260,50);
cuqui_level2(680,260,50);
cuqui_level2(780,260,50);
loop
if(numenemigo==9);
signal(type cuqui_level2,s_kill);
//SIGUIENTES TANDAS!!!--------------------------------------------------------------------------------------
cuqui_level2(10,260,50);
cuqui_level2(120,260,50);
cuqui_level2(230,260,50);
cuqui_level2(350,260,50);
cuqui_level2(460,260,50);
cuqui_level2(580,260,50);
cuqui_level2(680,260,50);
cuqui_level2(780,260,50);
end
if(numenemigo==17);exit("FIN DE LA DEMO!",0);BREAK;END
scroll[0].y0=scroll[0].y0-12;
frame;
end
end[/code]
Ya sabeis que mi portatil y la consola no se llevan muy bien,si ay alguna otra opcion para debugear..
Gracias y saludos
sinceramente no entiendo como no funciona...
no entiendo como usas F2 en tu pc, si dices que se te apaga, entonces no puedes usar ningun programa que use F2? cuando me dices eso, se me ocurre que estas haciendo la pulsacion combinando teclas, y no es eso lo que hay que hacer.
tambien puedes prescindir de las teclas de funcion y escribir los comandos a mano en la consola.
otra opcion es usar say y ver que sale en la terminal donde arrancas tu juego.
No de verdad,no ago combinacion de teclas,simplemente abro la consola y pulso f2 y no pasa nada,savo que se me apaga la conexion wifi.
pero eso tambien te pasa sin usar bennugd? que raro
bueno, puedes escribir los comandos en la consola, las teclas de funcion son solo atajos.
Si,me pasa con todos los programas de ordenador.
He puesto un say dentro del loop del procesos cuquis_level2
asi
loop
say("golpes:"+golpescuca2); y en el primer escuadron se restan los golpes bien
pero en el segundo escuadron se restan pero enseguida se suman! wow!
A ver su puedo cazar el bug
bienvenido al mundo del say... :D
ahora si tiene sentido lo del F2, no sera algun problema con tu equipo? probaste con un teclado externo?
como sea, me alegro que hayas podido usar el say de forma satisfactoria.
Quote from: SplinterGU on November 11, 2010, 01:49:55 AM
bienvenido al mundo del say... :D
ahora si tiene sentido lo del F2, no sera algun problema con tu equipo? probaste con un teclado externo?
como sea, me alegro que hayas podido usar el say de forma satisfactoria.
Creo que es por que el portatil tienen la configuracion de teclado asi,o que lleva algun programa integrado para atajos de teclado.lo que no se es como se llama para cerrarlo xD
o configurarlo correctamente?
El say es muy envidiado en otros sitios xDDDD
El say es más eficaz que el modo debug xD
Me va a acabar gustando el say,pero sigo sin cazar el maldito bug,seguro que es una tonteria mu grande,ahora despues de cenar me liare a tortazos con el codigo a ver.
Nada,ni con say!
Por alguna extraña razon los if que pongo dentro del proceso cuqui_level2 no se cumplen o se cumplen mal
Los puntos se suman pero lo demas no se cumple.
queria añadirles un poco de emocion a los marcianitos (cucarachas) pero las voi a tener que dejar "estaticas
Aqui os dejo la version actual,para si alguien lo quiere probar al menos xD
http://www.megaupload.com/?d=JB0F8KNU
Saludos
no vi este codigo, pero vi el anterior, evita usar comparaciones por igual, usa mayor igual o menor igual o mayor o menor.
te refieres a usar por ejemplo if(variable>10); accion...;end
Quote from: Goku jr on November 11, 2010, 11:44:21 PM
te refieres a usar por ejemplo if(variable>10); accion...;end
Eso es, así evitas que varios procesos en paralelo incrementen la variable y pase de 8 a 13 sin que detectes el 10.
Es como la condición de muerte por puntos de vida, siempre:
IF ( vida <= 0 )
Vale,lo probare,en todo mi codigo las comparariones las hacia con ==
de todas maneras estoy reescribiendo el codigo desde el pricipio,ayudandome del manual de osk.
Salu2!