Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: poletro on October 14, 2012, 02:42:58 AM

Title: Problemas con variables (+ presentación)
Post by: poletro on October 14, 2012, 02:42:58 AM
Hola a todo el mundo.

Primero de todo me gustaría presentarme. Soy un estudiante de 20 años, de Barcelona, actualmente estudiando en Castellón (Comunidad Valenciana). Desde siempre me han gustado los videojuegos y, desde no hace tanto, me dedico a programar en mis tiempos libres. El tema es que, en Castellón, han decidido organizar un concurso de videojuegos programados en BennuGD y, con un par de compañeros, nos hemos puesto al lío. He intentado seguir, básicamente, los tutoriales de Trinit y he ido consultando mis dudas por google (la mayoría de las cuales me llevaban aquí, óbviamente). La cosa es que tenemos poco tiempo y he intentado apurar al máximo mis dudas, pero me he encallado en lo que probablemente sea una tontería y ya no puedo aguantar más. Ahí voy.

Mi problema reside en el ámbito de las variables constantes y globales. Tengo mi proyecto separado en diferentes documentos, con un proceso por documento, y un documento principal que carga los fpgs, el scroll, llama a los procesos "hero" y "enemy" y poca cosa más.
Empecé creando el proceso "hero" y perfeccionándolo al máximo. Dicho proceso, tenía sus variables constantes y todo iba viento en popa. Cree el proceso "animation" que, básicamente, anima las diferentes acciones del proceso "hero". "Hero" tenía un INCLUDE para el proceso "animation". Todo bien. "Enemy" también llama al proceso "animation" y, por lo tanto, tengo un INCLUDE para dicho proceso.

Ahí me empezaron a surgir errores que no he sabido solucionar. Mis suposiciones son que, ya que dos proyectos INCLUDEn el mismo proyecto (animation) con sus variables constantes declaradas en ese mismo proyecto, se redeclaran variables y eso me da error. Así pues, decidí crear las variables constantes en mi proceso principal (videogame), pero los procesos hijos (hero y enemy) no me las reconocen. He intentado crearlas tanto globales como constantes en cada uno de los procesos que creo apropiados, y nada.

Espero que me podáis echar una mano. Si necesitáis ejemplos más concisos o algún que otro pantallazo, intentaré postearlos los antes posible. Gracias de antemano.

TL;DR: explicación de variables globales/constantes y su rango entre procesos en diferentes documentos plzzzz
Title: Re:Problemas con variables (+ presentación)
Post by: SplinterGU on October 14, 2012, 02:55:15 AM
bienvenido.

codigo de ejemplo con el error, por favor.
Title: Re:Problemas con variables (+ presentación)
Post by: poletro on October 14, 2012, 03:04:55 AM
Más que solucionarme el error, me gustaría saber el rango de las variables y eso (he intentado buscar información pero no la he encontrado).

videogame.prg
...
GLOBAL
    _STAND = 1;
    _WALK = 2;
...
END
...
BEGIN
    hero();
...
END



hero.prg
...
PROCESS hero()
PRIVATE
    action = _STAND;
...
END


Sí, sé que en este caso no hay razón para que la variable sea global, pero bueno. :)


EDIT: woops. El error: Unknown identifier (token error: "_STAND")
Title: Re:Problemas con variables (+ presentación)
Post by: SplinterGU on October 14, 2012, 03:26:37 AM
no, no, me refiero a codigo compilable completo, asi no puedo ver cual es el problema, ni darte una solucion... pero me suena que el problema es que estas usando variables antes de definirlas, o sea, antes que el compilador sepa que esa variable existe.
Title: Re:Problemas con variables (+ presentación)
Post by: poletro on October 14, 2012, 03:32:42 AM
Uhm, preferiría no postear gran parte del código (ya que, como he dicho, este proyecto se presentará a un concurso).
Por otro lado, a qué te refieres? No se supone que si declaro e inicializo las variables globales antes de llamar al proceso que las usa, el compilador ya tiene constancia de dicha variable?
Title: Re:Problemas con variables (+ presentación)
Post by: SplinterGU on October 14, 2012, 06:27:20 AM
no es antes de llamar al proceso, sino que incluso el proceso que las usa las tiene que tener antes declaradas.

es como cuando tu lees un libro, donde hay objetos o personajes, si tu no los conoces antes de mano, cualquier referencia a los mismos en el libro antes de que los definan no sabran que o quienes son.

no postees tu codigo, pero pon un codigo de ejemplo, compilable donde muestre el error... pueden ser 2 o 3 funciones, con un solo codigo a=b; y return; pero que muestre el problema.
Title: Re:Problemas con variables (+ presentación)
Post by: alex on October 14, 2012, 11:37:43 AM
Bienvenido, el error si no pones más código ni pones en que línea tienes el error es dificil de averiguar, pero viene del lado que dice Splinter, el problema esta en que el compilador no sabe que es _STAND, el compilador lee el código en un cierto orden, y debe llegar a una linea del codigo sin haber inicializado la variable _STAND,
entonces tu error puede venir de eso, u otra cosa que no creo, nunca lo he probado yo a hacerlo como tu y no se, creo que en el bloque private no puedes poner que una variable privada es igual a una global, solo puedes poner que es igual a una cantidad,
asi que puedes probar a cambiar las lines y escribir esto:

Process hero()
private
      action;
...
end
begin
      action=_STAND;
...


Y suerte con el concurso
Title: Re:Problemas con variables (+ presentación)
Post by: poletro on October 14, 2012, 01:22:43 PM
¡Buenos días! He intentado declarar la variable como privada e inicializarla en el bloque begin, pero da el mismo error. Gracias de todas formas. :)

Ejemplo de código:

videogame.prg
PROGRAM test;

INCLUDE "hero.prg";

import "mod_video";
import "mod_proc";
import "mod_map";
import "mod_draw";
import "mod_key";
import "mod_rand";
import "mod_grproc";
import "mod_text";
import "mod_scroll";
import "mod_say";

GLOBAL
_STAND = 1;
END

PRIVATE
int fpgHero;
int idHero;
BEGIN
set_mode(640,480,32,MODE_WINDOW);
fpgHero = load_fpg("./tests.fpg");

idHero = hero();

start_scroll (0,0,503,501,0,0);
scroll[0].camera = idHero;
END


hero.prg
import "mod_video";
import "mod_proc";
import "mod_map";
import "mod_draw";
import "mod_key";
import "mod_rand";
import "mod_grproc";
import "mod_text";
import "mod_scroll";
import "mod_say";

PROCESS hero()

PRIVATE
int action = _STAND;

BEGIN
LOOP

FRAME;
END
END


Error
C:\~\hero.prg :15: error: Unknown identifier (token error: "_STAND" ).
C\~\hero: doesn't exist or isn't version 7 DCB compatible
Title: Re:Problemas con variables (+ presentación)
Post by: alex on October 14, 2012, 01:28:28 PM
has probado lo que te dije, porque no veo ningun otro error, y donde pones el include para hero(), lo debes de poner despues de las variables globales, y, yo le suelo poner extension .h, pero, creo que da lo mismo lo de la extension
Title: Re:Problemas con variables (+ presentación)
Post by: poletro on October 14, 2012, 01:33:25 PM
Sí, lo he probado y da el mismo error. Acabo de probar poniendo el INCLUDE después de las variables globales y sigue dando el mismo error.  :(
Title: Re:Problemas con variables (+ presentación)
Post by: alex on October 14, 2012, 01:57:01 PM
videogame
PROGRAM test;

import "mod_video";
import "mod_proc";
import "mod_map";
import "mod_draw";
import "mod_key";
import "mod_rand";
import "mod_grproc";
import "mod_text";
import "mod_scroll";
import "mod_say";

GLOBAL
_STAND = 1;
END

#INCLUDE "hero.h";

Process main()
PRIVATE
int fpgHero;
int idHero;
end
BEGIN
set_mode(640,480,32,MODE_WINDOW);
fpgHero = load_fpg("./tests.fpg");

idHero = hero();

start_scroll (0,0,503,501,0,0);
scroll[0].camera = idHero;
END


intenta probarlo algo asi,

hero.h
PROCESS hero()

PRIVATE
int action;
end

BEGIN
       action=_STAND;
LOOP

FRAME;
END
END

Title: Re:Problemas con variables (+ presentación)
Post by: poletro on October 14, 2012, 02:06:27 PM
Ya lo he probado Alex. :) Sigue dando el mismo error.
Title: Re:Problemas con variables (+ presentación)
Post by: alex on October 14, 2012, 03:23:49 PM
ok, creo que ya se donde tienes el error, estas intentando compilar hero.prg en vez de videogame.prg por eso te da error tambien de que no reconoce el arcivo como compatible (porque no tiene Main(), C\~\hero: doesn't exist or isn't version 7 DCB compatible) si es eso no te desesperes, solo hay que compilar el videogame.prg, por si acaso me equivoco, te adjunto dos archivos con el esquema que me has puesto antes (a mi estilo de programar con bennu) y tienes que compilar el que pone prueba.prg.

Nota: los archivos vienen en un .zip
Title: Re:Problemas con variables (+ presentación)
Post by: SplinterGU on October 14, 2012, 03:42:26 PM
ahi esta el problema que te digo, tienes el include antes que el global... y por ende estas queriendo usar una variable que aun no fue declarada...

como lo puso alex, compila perfectamente... fijate que estes compilando el ejemplo de alex... ya no deberia darte error, de hecho a mi no me lo da...


splinter@splinter:~/tmp/hero> cat hero.prg
PROGRAM test;

import "mod_video";
import "mod_proc";
import "mod_map";
import "mod_draw";
import "mod_key";
import "mod_rand";
import "mod_grproc";
import "mod_text";
import "mod_scroll";
import "mod_say";

GLOBAL
        _STAND = 1;
END

#INCLUDE "hero.h"

Process main()
PRIVATE
        int fpgHero;
        int idHero;
end
BEGIN
        set_mode(640,480,32,MODE_WINDOW);
        fpgHero = load_fpg("./tests.fpg");

        idHero = hero();

        start_scroll (0,0,503,501,0,0);
        scroll[0].camera = idHero;
END

splinter@splinter:~/tmp/hero> cat hero.h
PROCESS hero()

PRIVATE
    int action;
end

BEGIN
    action=_STAND;
    LOOP
        FRAME;
    END
END

splinter@splinter:~/tmp/hero> bgdc hero.prg
BGDC 1.0.0 (Oct  6 2012 19:16:55)
Bennu Game Development Compiler

Copyright (c) 2006-2012 SplinterGU (Fenix/BennuGD)
Copyright (c) 2002-2006 Fenix Team (Fenix)
Copyright (c) 1999-2002 Jos� Luis Cebri�n Pag�e (Fenix)


File hero.dcb compiled (53903 bytes):

  Processes                     2
  Global data                1072 bytes
  Local data                  220 bytes
  Private data                 12 bytes
  Public data                   0 bytes
  Code                        212 bytes
  System processes            220
  Globals vars                 24
  Locals vars                  28
  Private vars                  3
  Publics vars                  0
  Identifiers                 641
  Structs                       7
  Strings                      25 (226 bytes)

splinter@splinter:~/tmp/hero>

Title: Re:Problemas con variables (+ presentación)
Post by: poletro on October 14, 2012, 03:49:13 PM
Pues sí, el ejemplo de Alex va genial.
Aunque se me hace raro ya que, la primera vez que me lo dijo, puse el INCLUDE debajo de las globales y me seguía dando el error. La línia PROCESS main() la tenía también en mi código, lo que me faltaba cerrar algunos END que pensaba que eran opcionales (por ejemplo, el END de PRIVATE). Aún así, ahora me dice que me he dejado algún paréntesis por cerrar, pero bueno. Sigo investigando.
Muchas gracias.

PD: +1 karma para Alex.  :)
Title: Re:Problemas con variables (+ presentación)
Post by: KeoH on October 14, 2012, 07:50:13 PM
otra cosa .. si el archivo hero.h lo incluyes despues de los imports del archivo principal, no es necesario q metas estos improts tambien en el archivo hero.h ni en ningun otro.
Title: Re:Problemas con variables (+ presentación)
Post by: poletro on October 14, 2012, 08:11:13 PM
En cuanto a los imports, los tengo en un archivo aparte llamado imports.prg (que, según veo, debería llamar a estos módulos ~.h, no?). Gracias de todas formas, es bueno saberlo.
Title: Re:Problemas con variables (+ presentación)
Post by: panreyes on October 20, 2012, 06:38:35 PM
Encantado de conocerte Poletro. Me gustaría ayudarte, pero ahora somos RIVALES.


En fin, locuras de nuestra ciudad. Se presenta un proyecto de charla+curso de 30h+concurso y deciden hacer sólo el concurso.


¿Cuánta gente estáis interesados en aprender BennuGD? Si se apunta bastante gente, puedo explicaros buena parte del lenguaje en un par de charlas.


Saludos
Title: Re:Problemas con variables (+ presentación)
Post by: alex on October 20, 2012, 07:17:23 PM
Quote from: PiXeL on October 20, 2012, 06:38:35 PM
Encantado de conocerte Poletro. Me gustaría ayudarte, pero ahora somos RIVALES.


En fin, locuras de nuestra ciudad. Se presenta un proyecto de charla+curso de 30h+concurso y deciden hacer sólo el concurso.


¿Cuánta gente estáis interesados en aprender BennuGD? Si se apunta bastante gente, puedo explicaros buena parte del lenguaje en un par de charlas.


Saludos

Pixel, no se a que te refieres, pero si es un curso que vas a dar, me encantaria aprender bennugd, estuve con el manual de osk, y aunque ya tengo algunos conceptos de programacion y muchas funciones retenidas en memoria, todavia me queda un monton sobre tiles, regiones, scrolls, etc. que me considero novato,  aparte de libs no oficiales y distintos ports que a ver si saco tiempo y los pruebo.
Title: Re:Problemas con variables (+ presentación)
Post by: poletro on October 21, 2012, 01:20:45 AM
Quote from: PiXeL on October 20, 2012, 06:38:35 PM
Encantado de conocerte Poletro. Me gustaría ayudarte, pero ahora somos RIVALES.


En fin, locuras de nuestra ciudad. Se presenta un proyecto de charla+curso de 30h+concurso y deciden hacer sólo el concurso.


¿Cuánta gente estáis interesados en aprender BennuGD? Si se apunta bastante gente, puedo explicaros buena parte del lenguaje en un par de charlas.


Saludos

Pues como programador de mi grupo estoy sólo yo, y el tema charlas y clases no me interesa mucho, así que...
Gracias de todas formas.

PD: No me ha quedado muy claro, pero te presentas al concurso, también? Si es así, estamos... vamos listos. xD
Title: Re:Problemas con variables (+ presentación)
Post by: panreyes on October 21, 2012, 08:50:08 AM
Alex, lo ofrecía a poletro porque ambos somos de Castellón.


Poletro, te pongo en situación. Érase una vez que se era un desarrollador en BennuGD llamado Pablo Navarro que a menudo iba haciendo talleres de BennuGD por diferentes eventos de Castellón.
Una vez esto llegó a oídos de la gente de las aulas municipales y estos decidieron que sería una buena idea montar charlas+curso+concurso. Este proyecto lo entregaron al ayuntamiento, y el ayuntamiento, ni corto ni perezoso, no quiso hacer ni las charlas ni el curso, pero sí el concurso.


Pues bueno, se hace un concurso de desarrollo de videojuegos. Vale. Pero el problema es que no se enteran y el concurso mantiene la restricción de que debe ser desarrollado en BennuGD, sin cursos, ni charlas, ni nada.


No tiene ni pies ni cabeza, ya que sólo dos personas en toda la ciudad sabemos desarrollar bien con él.
Title: Re:Problemas con variables (+ presentación)
Post by: FreeYourMind on October 21, 2012, 09:23:33 AM
Nunca supongas nada, igual hay mas gente en tu ciudad que hace juegos en bennu y no se pasa por aqui...

Si así fuese tambien diria que en un pais entero como Portugal tambien sólo hay un par de personas que dessarrollan en Bennu xDD
Title: Re:Problemas con variables (+ presentación)
Post by: Rein (K´)ah Al-Ghul on October 21, 2012, 03:53:07 PM
con un poco de suerte apareceran mas participantes...

Quote from: FreeYourMind on October 21, 2012, 09:23:33 AM
Nunca supongas nada, igual hay mas gente en tu ciudad que hace juegos en bennu y no se pasa por aqui...

Si así fuese tambien diria que en un pais entero como Portugal tambien sólo hay un par de personas que dessarrollan en Bennu xDD
y ese par de personas solo estan dentro de la cabeza de free :P


Title: Re:Problemas con variables (+ presentación)
Post by: blostec on October 21, 2012, 08:53:10 PM
Quote from: Rein (K´)ah Al-Ghul on October 21, 2012, 03:53:07 PM
y ese par de personas solo estan dentro de la cabeza de free :P
Ahí le has dado  ;D