PDA

Ver la versión completa : Saludos y duda con fenix.



Kiwiz
18/05/2008, 23:00
Muy buenas a todos , soy nuevo por aquí ,hace un tiempo vendí mi PSP para comprarme una GP2X F200 ya que el tema de la emulación y la posibilidad de programar algo para la misma me entusiasman.

Bueno , vamos al grano , estoy empezando con fenix y he hecho un sencillísimo juego pero no me compila y nose que esta mal , probablemente muchas cosas.
Dejo el código por si algún alma caritativa quiere ofrecerse a ver que falla.

Saludos.

Kiwiz
18/05/2008, 23:04
Vuelvo a postear que había subido mal el archivo.
Este es el bueno;

chipan
18/05/2008, 23:20
¿Podrías indicarnos el fallo que da al compilar? Yo desde aqui no puedo compilarlo porque no tengo el fenix.

Kiwiz
18/05/2008, 23:27
¿Podrías indicarnos el fallo que da al compilar? Yo desde aqui no puedo compilarlo porque no tengo el fenix.

Pues esto es lo curioso , que me da fallo en la segunda línea .

es así ;

PROGRAM Aparca tu coche ;
GLOBAL


Saludos.

chipan
18/05/2008, 23:31
JUAS ¿como no lo he visto?

Prueba a poner Aparca_tu_coche; o en todo caso Aparca_tu_coche();
no se pueden dar nombres con espacios a los programas, a las funciones, a las constantes, ni a las variables.

Kiwiz
19/05/2008, 00:01
JUAS ¿como no lo he visto?

Prueba a poner Aparca_tu_coche; o en todo caso Aparca_tu_coche();
no se pueden dar nombres con espacios a los programas, a las funciones, a las constantes, ni a las variables.

Ok , gracias.

Ahora me da fallo en la línea 11 xD.


frenar=load_wav("frenar.wav");
Saludos.

chipan
19/05/2008, 00:08
¿has declarado la variable frenar? ¿existe el wav? ¿está en la carpeta adecuada? ¿tiene todos los parámetros esa funcion? ¿el error es de la linea anterior?

Kiwiz
19/05/2008, 00:20
GLOBAL
int id1; // ¿Es aquí donde tengo que definir las variables de los sonidos?
end
Begin
set_mode(320,240,1);
set_fps(50,1);
set_title("Aparca tu coche");
id1=load_fpg("imagenes.fpg");
acelerar=load_wav("acelerar.wav");
frenar=load_wav("frenar.wav");
fin=load_wav("fin.wav");

¿Entonces quedaría así?


GLOBAL
int id1;
acelerar;
frenar;
fin;
end
Begin
set_mode(320,240,1);
set_fps(50,1);
set_title("Aparca tu coche");
id1=load_fpg("imagenes.fpg");
acelerar=load_wav("acelerar.wav");
frenar=load_wav("frenar.wav");
fin=load_wav("fin.wav");

Saludos.

Drumpi
19/05/2008, 00:43
Si, si las quieres como variables globales.
Ten cuidado porque, si no te has dado cuenta, te dice que el fallo está en la linea siguiente a la que realmente está (decías que daba error en la linea 2 cuando te daba en la linea 1, la del program).

chipan
19/05/2008, 00:53
SI, queda mejora así.
Un truco para definir variables sin tantas lineas es hacer:

int id1,acelerar,frenar,fin;

Kiwiz
19/05/2008, 20:31
Muy buenas , tengo otro problemilla y es que en la línea 19 (la de "Begin") me da error y pone que no identifica el proceso , y no entiendo por qué. Asi que definí la variable pantalla (que es el menú) pero ni aún así funciona.



Program Aparca_tu_coche;
GLOBAL
int id1,acelerar,frenar,pantalla,fin;
end
Begin
set_mode(320,240,1);
set_fps(50,1);
set_title("Aparca tu coche");
id1=load_fpg("imagenes.fpg");
acelerar=load_wav("acelerar.wav"); //cargando la música.
frenar=load_wav("frenar.wav");
fin=load_wav("fin.wav");
pantalla(); //¿Sólo cargo el menú?
loop
If(key(_esc)) exit(0); End;
Frame;
End;
Process pantalla();
Begin // Fallo en la línea 19 ¿?
file=id1 graph=1; X=160; y=120;
write(0,160,120,1,"aprendiendo fenix");//señalo fuente, asignación x e y,tipo y texto.
write(0,190,130,1,"Aparca tu coche version beta 1");
write(0,100,100,1,"Pulsa Start");
loop
If (key(_enter));
delete_text(0); // se borra el texto pero ... ¿qué viene a continuación?
fondo();
Break;
end;
Frame;
end;
end;
PROCCES fondo();
Begin
graph=2; x=160; y=120;
end; // ¿ Son necesarios 2 "end"?
end;
PROCCES coche();
Begin
graph=3; x=10; y=120;
LOOP
IF (key(_up)) y=y-1; END
IF (key(_down)) y=y+1; END
IF (key(_left)) x=x-1; END
IF (key(_right)) x=x+1; END
IF (key(_enter)) graph=1; END // ¿ Es necesario poner ";" despues de la función enter ?
IF (collision(TYPE aparcamiento)) BREAK; END
FRAME;
END
END
PROCCES aparcamiento();
Begin
graph=4; x=200; y=300;
Loop
If (collision(TYPE coche)) BREAK; END
Frame;
end
end
PROCCES puntuacion();
Begin
loop
If collision(TYPE aparcamiento); graph=5; end // No utilizo identificadores asik simplifico.
Frame;
end
endSaludos y gracias a chipan y a drumpi.

Darumo
19/05/2008, 21:14
revisa los "END" y ";" ,debes tener cuidado de que no se te cuelen de mas o te falte alguno casi seguro que tus problemas vengan de ahi. Quizad ese ; del END anterior al Process pantalla() sobre, y si es asi te sobraran otros tantos mas adelante...

hardyx
19/05/2008, 22:07
No lo he compilado, pero así a ojo te pongo el código arreglado con comentarios.
Ánimo con el fénix, hay muchos tutoriales en internet.


// NOTAS:
// Separa los procesos con líneas en blanco
// Indentar los bloques hace más legible el código
// Cada bloque Begin debe terminar con un end y cada loop igual.
// Si no cierras bloque process te dará error en el siguiente proceso.
// No es necesario poner ";" después de END
// Mira que tus procesos sean llamados desde algún sitio

Program Aparca_tu_coche;
GLOBAL
int id1,acelerar,frenar,pantalla,fin;
end

// programa principal
Begin
set_mode(320,240,1);
set_fps(50,1);
set_title("Aparca tu coche");
id1=load_fpg("imagenes.fpg");
acelerar=load_wav("acelerar.wav"); //cargando la música.
frenar=load_wav("frenar.wav");
fin=load_wav("fin.wav");
pantalla(); // ¿Sólo cargo el menú?
loop
If(key(_esc)) exit(0); End
Frame;
End
End // te faltaba este end (por eso el error)

Process pantalla();
Begin // Fallo en la línea 19 ¿? (por el end de arriba)
file=id1 graph=1; X=160; y=120;
write(0,160,120,1,"aprendiendo fenix");//señalo fuente, asignación x e y,tipo y texto.
write(0,190,130,1,"Aparca tu coche version beta 1");
write(0,100,100,1,"Pulsa Start");
loop
If (key(_enter));
delete_text(0); // se borra el texto pero ... ¿qué viene a continuación?
fondo();
Break;
end
Frame;
end
end

Process fondo();
Begin
graph=2; x=160; y=120;
end
//end // sobra un end

Process coche();
Begin
graph=3; x=10; y=120;
LOOP
IF (key(_up)) y=y-1; END
IF (key(_down)) y=y+1; END
IF (key(_left)) x=x-1; END
IF (key(_right)) x=x+1; END
IF (key(_enter)) graph=1; END // ¿ Es necesario poner ";" despues de la función enter ?
IF (collision(TYPE aparcamiento)) BREAK; END
FRAME;
END
END

Process aparcamiento();
Begin
graph=4; x=200; y=300;
Loop
If (collision(TYPE coche)) BREAK; END
Frame;
end
end

// NOTA: este proceso nunca es ejecutado
Process puntuacion();
Begin
loop
If collision(TYPE aparcamiento); graph=5; end // No utilizo identificadores asik simplifico.
Frame;
end
end

Kiwiz
19/05/2008, 23:17
Gracias a todos , ya me compila.



Saludos y a ver si dentro de un tiempo puedo publicar este juego , me tengo quer currar aún los gráficos y el sonido.

< - >
Buenas , siento ser tan pesado , pero he hecho unos gráficos rápidos con el pack de neostalker pero cuando ejecuto el archivo ".dcb" , me dice que es un profundidad de color no soportada.


El Fallo es :


(gr_rotated_blit)



Saludos.

Drumpi
20/05/2008, 00:57
F&#225;cil: en set_mode est&#225;s poniendo una profundidad de color de 1 bit ^^
Usa 8 o 16 bits, seg&#250;n uses s&#243;lo gr&#225;ficos de 256 colores con la misma paleta, o de 16 o m&#250;ltiples de 8 con paletas distintas.

Y no te preocupes, se todo lo pesado que necesites, al principio todo son dudas tontas o no tanto, luego... seguir&#225;s tropez&#225;ndote en tonter&#237;as XDDD

Zizti
20/05/2008, 01:21
&#225;nimo chaval. que as&#237; se empieza y nunca se sabe a donde se puede llegar!

masteries
20/05/2008, 02:06
Gráficos rápidos con el pack de neostalker...?? qué es el pack de NeoStalker?

Yo ahora mismo me estaba currando los personajes de mi nuevo proyecto con Poser 4, de momento el menú y las pantallas de presentación y el soporte para la pantalla táctil están completos. Por cierto que en breve adaptaré el soporte táctil a mi primer juego en Fénix, el Dr.Mates y tengo lista una revisión de la versión actual para los que tengais una F100. Me lío a hablar demasiado...

Suerte con tu juego de aparcar coches y bienvenido al mundo Fénix!!

Kiwiz
20/05/2008, 16:26
Gráficos rápidos con el pack de neostalker...?? qué es el pack de NeoStalker?



Sí , el pack de Neostalker es un pack de gráficos muy útil que puedes encontrar en la sección de descargas , en el apartado de programación.




Saludos.

masteries
20/05/2008, 19:00
Gracias.

Kiwiz
04/06/2008, 16:52
Perdón por el reflote , pero me da otro error y no sé cómo solucionarlo. He probado quitado los ";" y demás pero no hay manera.




Cont=retardo; // Aquí da fallo.
disparo();
end
Frame;
end
endEl fallo es :


";" expected ("CONT")Saludos.

juanvvc
04/06/2008, 17:06
Es probable que el fallo est&#233; en la l&#237;nea de antes, y te falte ; al final :)

Kiwiz
04/06/2008, 17:09
ya juanvvc , da fallo en la línea de "disparo();" pero supongo que será la de arriba.

A todo esto, a ver si pruebo ya tu lemonboy juan , que debe ser cojonuido según dicen xD .


Edito para poner más código por si viene el problema de líneas anteriores , pero lo veo improbable :



// ...
Loop
cont--;
IF (cont<0) cont=0; END
IF (key(_up)) y=y-1; END
IF (key(_down)) y=y+1; END
IF (key(_left)) x=x-1; END
IF (key(_right)) x=x+1; END
IF (x>320) ; END
IF (y>240) ; END
If (key(_x)) and (cont==0)
Cont=retardo;
disparo();
end
Frame;
end
end


Saludos.

Drumpi
05/06/2008, 01:58
Si, es la linea anterior al cont, te dice que esparaba un punto y coma y se ha encontrado la palabra cont. Prueba a poner par&#233;ntesis a toda la condici&#243;n del if:
If ((key(_x)) and (cont==0))
Puede que est&#233; confundiendo el "and (cont==0)" como instrucciones de dentro del if y que le falte el punto y coma (no se lo pongas, prueba con los par&#233;ntesis. Aunque
if (key(_x) and (cont==0))
tambi&#233;n vale.

zikitrake
05/06/2008, 15:58
Es m&#225;s

if (key(_x) and cont==0)

Drumpi
05/06/2008, 16:05
Si, como valer, vale, porque el == tiene m&#241;as prioridad que el AND, pero por si acaso, como hay lenguajes que son muy suyos, prefiero acostumbrarme a poner par&#233;ntesis.
Ya lo dec&#237;an mis profes: los par&#233;ntesis m&#225;s vale que sobren que no que falten ((()))()()((()((()))))

zikitrake
05/06/2008, 16:28
Si, como valer, vale, porque el == tiene m&#241;as prioridad que el AND, pero por si acaso, como hay lenguajes que son muy suyos, prefiero acostumbrarme a poner par&#233;ntesis.
Ya lo dec&#237;an mis profes: los par&#233;ntesis m&#225;s vale que sobren que no que falten ((()))()()((()((())))):) : ) : ))) : )))) : ))))) aqu&#237; se ve que s&#243;lo vale un par&#233;ntesis [wei]

(Ah! ya me hubiera gustado haber tenido un profe que me bien-encaminara en esto de la programaci&#243;n)

Drumpi
05/06/2008, 20:17
(Ah! ya me hubiera gustado haber tenido un profe que me bien-encaminara en esto de la programación)

(A mi tambien)
Siento el offtopic, tenía que decirlo.

Kiwiz
10/06/2008, 21:55
Buenas de nuevo amigos.
Me estoy currando un remake del juego bubbles (un juego flash que está en la zona arcade de esta página).

Y no va mal la cosa , pero me da un fallo que no se solventar por más que cambio las cosas :




loop
If (rand(0,100)<20)
Enemigo(rand(0,18),rand(-1,1),rand(2,5)); // Aquí da el fallo
EndA ver que sale de este "supuesto" futuro remake de bubbles. :D

Me da fallo de incorrecto número de parametros , que no reconoce a "enemigo" (lo cual no entiendo por qué) , me dice que espera ";" en vez de "," y muchos fallos más ... xD

Si alguien sabe cómo se escribiría esa línea.

Saludos y gracias .

chipan
10/06/2008, 23:14
Pon la cabecera del proceso enemigo.

Kiwiz
10/06/2008, 23:24
Pon la cabecera del proceso enemigo.

¿A qué te refieres?

Es que yo a veces me vuelvo loco con fenix.


Process enemigo ();

Esa es la cabecera.

Otra cosa que me ocurre , es que en el panel derecho donde el inspector de programas , no me reconoce el proceso enemido y antes si :confused: .


Saludos y gracias chipan x contestar.

chipan
10/06/2008, 23:37
ejem entonces ya he visto el problema.

A ver, tu llamas al proceso enemigo así


enemigo(rand(0,18),rand(-1,1),rand(2,5));

Y la cabecera del proceso enemigo es así


Process enemigo();

¿no te parece que falta algo?

lo que metes en la llamada al proceso son parametros que HAN DE EXISTIR en la cabecera del proceso.

Ahora supongo que tendras algo así:


Process enemigo();
private
int a;
int b;
int c;
begin
...loquesea...

La cabecera tendría que quedar similar a esto.


Process enemigo(int a, int b, int c);
begin
...loquesea...

Es decir, puedes declarar variables privadas o dejar accesibles variables locales en la propia cabecera del proceso en lugar de declararlas dentro.

Si pones un poco mas de código (el del proceso enemigo) te lo corrijo y te lo explico un poco mejor

Kiwiz
10/06/2008, 23:47
Aquí va el código del proceso enemigo :




Process enemigo ();
Begin
graph=4;Size=rand(65,115); x=220; y=230; X+=inc_x; Y+=inc_y;
loop
play_wav(sonido,0);
set_wav_volume (1,20);
IF (x>320) ; END
IF (y>240) ; END
IF (collision (type bola)); BREAK ; END
end
Frame;
end



Saludos.

chipan
10/06/2008, 23:58
Buff no entiendo que quieres que haga ese proceso, pero si pretend&#237;as que se moviese, mal vas. dime que quieres que haga y a ver si lo entiendo, pero te digo, ese proceso est&#225; mal.

Kiwiz
11/06/2008, 00:14
Buff no entiendo que quieres que haga ese proceso, pero si pretendías que se moviese, mal vas. dime que quieres que haga y a ver si lo entiendo, pero te digo, ese proceso está mal.



Process enemigo ();
Begin
graph=4;Size=rand(65,115); x=220; y=230; X+=inc_x; Y+=inc_y;
loop
play_wav(sonido,0);
set_wav_volume (1,20); //música y volumen
IF (x>320) ; END
IF (y>240) ; END
IF (collision (type bola)); BREAK ; END // que cuando choque nuestra bola con el , el enemigo desaparezca.
end
Frame;
end
He puesto lo que quiero que haga.
Posiblemente este mal , voy a repetir todo el proceso enemigo pero lo que quiero es que me lo reconozca y que la línea que he puesto antes (la del enemigo rand ... ) este bien .


Saludos.

chipan
11/06/2008, 00:30
Si quieres que te reconozca la linea simplemente quita los tres rands.
Haz la llamada al proceso de la siguiente manera
enemigo();
&#191;facil no?
pero te advierto que primero no compilar&#225; porque inc_x e inc_y no existen; y lo segundo es que el enemigo no se mover&#225; y har&#225; un estruendo del carajo.

< - >
Yo haría el proceso enemigo así:


Process enemigo (int x, int inc_x, int inc_y);
Begin
graph=4;
Size=rand(65,115);
loop
x+=inc_x;
y+=inc_y;
IF (x>330) break; END
IF (y>250) break; END
IF (x<-10) break; END
IF (y<-10) break; END
IF (collision (type bola)) play_wav(sonido,0); frame; break; END
Frame;
end
end

Y lo llamaría así si quisiera que fuese de arriba a abajo

enemigo(rand(0,320), -9, 0, rand(1,10));
Y lo llamaría así si quisiera que fuese de izquierda a derecha

enemigo(-9, rand(0,240), rand(1,10), 0);
Y bueno, variando los parámetros podrías obtener muchos resultados.

juanvvc
11/06/2008, 11:22
Kiwiz, necesitas parar un momento y buscar alg&#250;n curso b&#225;sico de programaci&#243;n que te clarifique las reglas comunes. Aunque leyendo alg&#250;n curso b&#225;sico te parezca que pierdes el tiempo escribiendo "hola" o la tabla de 5 en la pantalla, en realidad te falta tanta base que es ahora cuando realmente est&#225;s perdiendo tiempo...

chipan
11/06/2008, 13:03
+1 juanvvc
Es una verdad como un templo lo que has dicho.

Drumpi
11/06/2008, 19:43
En este caso, repasar todo lo referente a procedimientos y funciones.

Bueno, es hora de hablar del estupendo manual de 500 p&#225;ginas de Oscar Torrente sobre programaci&#243;n en F&#233;nix (que quiz&#225;s sirva para aprender programaci&#243;n) :)
Si tienes prisas, el m&#237;o quiz&#225;s te venga mejor :D:D:D:D
Ambos andan por fenixworld.se32.com, y la &#250;ltima versi&#243;n de Osk actualizada creo que andaba en los &#250;ltimos fenixpack.

EDIT: Ups, olvidaba que fenixworld al final compr&#243; el dominio www.fenixworld.com :D