Perdón xD
Me dice:
Error in file mahpong.prg at line 56: Undefined procedure <"DIBUJAR">
Perdón xD
Me dice:
Error in file mahpong.prg at line 56: Undefined procedure <"DIBUJAR">
El coooodigo, necesito el cooodigo, al menos, las primeras 56 lineas ;D
Básicamente, ese error te dice que has llamado a un proceso o función llamado "dibujar", pero no has escrito el código de ese proceso o bien te has equivocado al escribir el nombre.
Pero no es el único error que te puede dar ese mensaje: olvidarte de poner punto y coma, dos puntos, un paréntesis, los paréntesis de la función... por eso necesito ver el código.
Si tienes miedo de que te lo miren por el foro, podrías mandármelo por MP. Pero si dices que sigues un tutorial no debería haber problema. Tampoco creo que te vayan a robar 56 lineas![]()
PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
Me he visto obligado a reempezar el código de nuevo, y he llegado al punto que estaba antes, pero me ha salido un error diferente.:
FXC 0.92a (Apr 13 2007 13:24:24) - Copyright (C) 1999 José Luis Cebrián Pagüe
Fenix comes with ABSOLUTELY NO WARRANTY; see COPYING for details
Error in file meupong.prg at line 11: ";" expected ("GLOBAL")
Pongo ";", lo quito y hago mil virguerías, pero sigue igual.
Ahí va el código:
//--------------------------------------------------------
//Program: EL MEU PRIMER PONG
//Autor: Garreny
//Equip: Garreny' s Pingas
//--------------------------------------------------------
////////////////////////////////////////////
// Funció inicial
Program MEUPONG
Global
int RESOLUCION_X;
int RESOLUCION_Y;
int X_Paleta_1;
int Y_Paleta_1;
int Ancho_Paleta_1;
int Alto_Paleta_1;
int color_paleta_1;
BEGIN
// INICIALITZAR ASPECTES GRÀFICS
set_title("El meu primer Pong");
Full_sreeen = false;
Graph_mode = mode_16bits;
set_mode (m640x480);
set_fps(80, 60/10);
RESOLUTION_X = 640;
RESOLUTION_Y = 480;
//ESCRIURE INFORMACIÓ SOBRE EL JOC EN PANTALLA
write(0,10,10,0,"El meu primer Pong, v. 0.01");
write(0.10.20.0."Equip Garreny");
write_int(0,300,10,1,&fps);
// HEM ACABAT D' INICIALITZAR, LLANCEM EL BUCLE PRINCIPAL
Controlador:Joc(); //Arranquem el controlador del joc
END
/////////////////////////////////////////////
// Controlador de joc
Process Controlador_Juego()
BEGIN
Inicializar();
Loop // Bucle principal
If(key(_esc)) // Si s' apreta esc
exit(0,0); // Sortir del joc
End
Dibujar();
Frame; // Refrescar pantalla
End // Del loop
END
//////////////////////////////////////////////
//Inicialitza el joc en el seu estat inicial
Process Inicialitzar()
BEGIN
X_Paleta_1=30;
Y_Paleta_1=24;
Ancho_paleta_1=20;
Alto_Paleta_1=100;
END
//////////////////////////////////////////////
// Dibuixa els elements del joc en pantalla
Process Dibuixar()
Begin
clear_screen();
drawing_map(0,0);
// Dibuixar Paleta 1
drawing_color(rgb(255,255,255));
draw_box(X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1-Alto_Paleta_1/2,
X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1+Alto_Paleta_1/2);
END
Última edición por Garreny; 11/02/2010 a las 20:42
No me importa que pongas el código en el idioma que quieras, pero al menos se consecuente con ello
Lo digo porque:
// HEM ACABAT D' INICIALITZAR, LLANCEM EL BUCLE PRINCIPAL
Controlador:Joc(); //Arranquem el controlador del joc
END
Process Controlador_Juego()
Además, no es Controlador:Joc(); sino Controlador_Joc(); A saber qué error te hubiera dado.
Respecto al que te ha dado ahora, es que en la linea
Program MEUPONG
te falta un ; al final de la linea. Según qué versión de Fenix, el error te lo da en la misma linea o en la linea siguiente (supongo que el contador de linea se actualiza antes de tiempo al compilar).
No te tomes los errores de forma literal, porque en ocasiones salta unas cuantas lineas más adelante de la cuenta: repasa el código, y no olvides compilar cada poco para asegurarte de que lo que escribes está bien hecho, es más fácil corregir 20 líneas que 200.
PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
Mirando un poco el error que te da es por lo siguiente:
If(key(_esc)) // Si s' apreta esc
exit(0,0); // Sortir del joc
End
Dibujar();
Llamas al proceso Dibujar() (castellano) pero luego defines el proceso como:
//////////////////////////////////////////////
// Dibuixa els elements del joc en pantalla
Process Dibuixar()
Begin
clear_screen();
Frame; // Refrescar pantalla
Has definido el proceso como Dibuixar (en Català en vez de Dibujar (Castellano)... los dos nombre han de ser iguales).
Esta claro... Fenix/Bennu no es poliglota
Es como si a tu hijo le pones de nombre Juanito y luego te extrañas que al llamarlo gritando: Pedrito! no te haga ni caso.
Última edición por Hokutoy; 12/02/2010 a las 01:54
Bien, gracias, ya he quitado los errores y me ha salido la pantalla, pero debería verse una pala del pong, pero no me aparece...
Código:
//--------------------------------------------------------
//Program: EL MEU PRIMER PONG
//Autor: Garreny
//Equip: Garreny' s Pingas
//--------------------------------------------------------
////////////////////////////////////////////
// Funció inicial
Program MEUPONG;
Global
int RESOLUCION_X;
int RESOLUCION_Y;
int X_Paleta_1;
int Y_Paleta_1;
int Ancho_Paleta_1;
int Alto_Paleta_1;
int color_paleta_1;
BEGIN
// INICIALITZAR ASPECTES GRÀFICS
set_title("El meu primer Pong");
Full_screen = false;
Graph_mode = mode_16bits;
set_mode (m640x480);
set_fps(80, 60/10);
RESOLUCION_X = 640;
RESOLUCION_Y = 480;
//ESCRIURE INFORMACIÓ SOBRE EL JOC EN PANTALLA
write(0,10,10,0,"El meu primer Pong, v. 0.01");
write(0,10,20,0,"Equip Garreny");
write_int(0,300,10,1,&fps);
// HEM ACABAT D' INICIALITZAR, LLANCEM EL BUCLE PRINCIPAL
Controlador_Juego(); //Arranquem el controlador del joc
END
/////////////////////////////////////////////
// Controlador de joc
Process Controlador_Juego()
BEGIN
Inicializar();
Loop // Bucle principal
If(key(_esc)) // Si s' apreta esc
exit(0,0); // Sortir del joc
End
Dibujar();
Frame; // Refrescar pantalla
End // Del loop
END
//////////////////////////////////////////////
//Inicialitza el joc en el seu estat inicial
Process Inicializar()
BEGIN
X_Paleta_1=30;
Y_Paleta_1=24;
Ancho_paleta_1=20;
Alto_Paleta_1=100;
END
//////////////////////////////////////////////
// Dibuixa els elements del joc en pantalla
Process Dibujar()
Begin
clear_screen();
drawing_map(0,0);
// Dibuixar Paleta 1
drawing_color(rgb(255,255,255));
draw_box(X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1-Alto_Paleta_1/2,
X_Paleta_1+Ancho_Paleta_1/2, Y_Paleta_1+Alto_Paleta_1/2);
END
Última edición por Garreny; 12/02/2010 a las 15:11
PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
A este paso me lo vas a acabar haciendo tu xd
Espero que sean normales estos problemas en un novato, porque sino me retiro xD
Bueno, yo sigo, ya me ha salido la pala de pong, ahora a por lo demás.
Animo Garreny, tus problemas nos han ocurrido a todos. No desistas, esperamos los años que sean por tu mega hit![]()
Gracias!
Bueno, he aquí otro problema:
Ya he puesto las dos paletas, la bola y todo, y la bola rebota perfectamente contra las paredes superior e inferior, pero las paletas las traspasa y no entiendo porqué.
Aquí va el código de las colisiones:
Process Control_Bola()
Begin
// COL·LISIONS AMB LA PALETA 1
if(Velocidad_Bola_X < 0 && X_Bola>X_Paleta_1
&& X_Bola-Ancho_Bola/2<=X_Paleta_1+Ancho_Paleta_1/2)
if(abs(Y_Paleta_1-Y_Bola)<Alto_Paleta_1*0.5+Alto_Bola*0.5)
Velocidad_Bola_X *=-1;
End
End
// COL·LISIONS AMB LA PALETA 2
if(Velocidad_Bola_X >0 && X_Bola<X_Paleta_2
&& X_Bola+Ancho_Bola/2>=X_Paleta_2+Ancho_Paleta_2/2)
if(abs(Y_Paleta_2-Y_Bola)<Alto_Paleta_2*0.5+Alto_Bola*0.5)
Velocidad_Bola_X *=-1;
End
End
//COL·LISIONS AMB LES PARETS SUPERIOR I INFERIOR
if(Velocidad_Bola_Y<0 && Y_Bola-Ancho_Bola*0.5<=50)
Velocidad_Bola_Y *=-1;
End
if(Velocidad_Bola_Y>0 && Y_Bola-Ancho_Bola*0.5>=430)
Velocidad_Bola_Y *=-1;
End
X_Bola+=Velocidad_Bola_X;
Y_Bola+=Velocidad_Bola_Y;
End
Y bueno, si necesitais en código entero:
Spoiler: Ver
No te preocupes, todas las dudas son muy normales en los novatos, no tienes más que echar un vistazo en el foro de bennu
Ahora estoy un poquito espeso, te lo tendría que mirar con mucha más calma mañana, pero sí que te voy a dar un par de consejos para que trabajes:
-Los paréntesis NUNCA SOBRAN, lo digo por las lineas
f(Velocidad_Bola_X >0 && X_Bola<X_Paleta_2
&& X_Bola+Ancho_Bola/2>=X_Paleta_2+Ancho_Paleta_2/2)
Que no queda claro dónde empieza y donde termina cada miembro de la comparación, es más, me atrevería a decir que no sigue ni el orden de operaciones que tu quieres. Nosotros, como personas inteligentes, sabemos que hay que multiplicar/dividir antes de sumar y restar, la máquina lo sabe, pero es posible que no (NUNCA DES POR SUPUESTO QUE LA MÁQUINA HACE LO QUE DEBE, regla fundamental), lo digo porque ahi veo una suma seguida de una división, y no se si el divisor engloba a los dos términos de la suma (por lo que estaría mal) o no (por lo que podría estar bien).
-No uses
Velocidad_Bola_X *=-1;
A menos que tengas MUY controlado lo que haces, lo digo por experiencia propia. A poco que la bola se meta más de la cuenta, puede empezar a rebotarte de mala manera.
-No usas la potencia del lenguaje, es decir, programas como si fuera C. Puedes crear una pala y mantenerla en un bucle infinito (poniento un FRAME dentro, claro) y que compruebe los botones para moverse, y crear el proceso bola y mantenerlo vivo todo el tiempo. Bennu usa los procesos como instancias que se ejecutan en paralelo, y van todos a la vez, y son independientes unos de otros. Te recomiendo que busques el clásico ejemplo del matamarcianos, viene en el Manual de Fenix/Bennu de Oscar Torrente (es EL MANUAL), o uno mas pequeño en FenixWorld.com hecho por un humilde servidor.
Cuesta un poco cogerle el truco a este tipo de programación, pero a la larga, verás que viene mejor para videojuegos, e incluso para aprender técnicas más avanzadas de programación (sí, hablo de pensar en multi-hilo o multi-nucleo).
Y un último consejo, basado en la regla básica: COMPRUEBA QUE DE VERDAD SE DAN LAS CONDICIONES DEL REBOTE, aunque tengas que ir una por una. Si dices que la x de la bola debe ser menor que la de la paleta, comprueba que es así.
Mira lo de los paréntesis, y si mañana sigue igual, te buscaré la solución.
PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
He peusto los paréntesis en todas las colisiones y nada...
Spoiler: Ver
Y esto con qué lo sustituyo?
Velocidad_Bola_X *=-1;
Es que el tutorial no explica las colisiones, solo las pone, y ahí acaba.
Última edición por Garreny; 16/02/2010 a las 21:27
Mirándolo así por encima, supongo que el fallo está en la linea:
if(Velocidad_Bola_X < 0 && X_Bola>X_Paleta_1 && (X_Bola-(Ancho_Bola/2))<=(X_Paleta_1+(Ancho_Paleta_1/2)))
Entiendo que al tener velocidad <0, la paleta 1 es la de la izquierda.
Luego compruebas que la bola esté a la DERECHA de la posición de la paleta (X_Bola>X_Paleta_1)
Y luego tienes la tercera comprobación que, si no entiendo mal, dices que el lado izquierdo de la bola debe estar más a la IZQUIERDA que el lado derecho de la paleta ¿no?
Lo que significa que la bola debería rebotar en dicha superposición. Ahora bien ¿qué velocidad máxima lleva la bola horizontalmente? te lo digo porque como sea mayor que ese pequeño espacio, es posíble que se lo "salte" (en un frame está a la izquierda, y en el siguiente está a la derecha, y nunca en los intermedios).
Si la velocidad es de 1, no debería haber problema.
Lo de la y parece que está bien, pero para asegurarnos, no multipliques por 0'5, procura evitar los decimales a toda costa, sobre todo en Fenix: divide entre 2 o haz un desplazamiento binario, pero no multipliques por un FLOAT, porque dan muchísimos problemas en UFenix.
En el caso de la paleta1, la linea:
Velocidad_Bola_X *=-1;
Lo cambiaría por
Velocidad_Bola_X =max_velocidad;
y en la 2 por
Velocidad_Bola_X =-max_velocidad;
Creo que es lógico ¿no? no copies el código, escríbelo tú y luego lo compruebas.
Si no, prueba a pasarte por el foro de Bennu, ocho ojos ven más que cuatro![]()
PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
En qué foro dices? xD
Lo he toqueteado, y nada.
Velocidad_Bola_X = 1;
Velocidad_Bola_Y = 1;
max_velocidad = 3/2;
max_velocidad = 3/2;
Las velocidades X y Y las tenía a tres, las he bajado y probado una a una, pero sigue sin colisionar con las placas (que de hecho, la bola va hacia la derecha, es decir, tendría que colisionar con la paleta 2).
Me refiero al foro de bennu:
bennugd.org
Y de ahi a official forum, tranquilo, está en español.
Es que aqui entro sólo cuando tengo tiempo libre: a las tantas de la noche ^^U
PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
Marcadores