Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Futu-block on May 08, 2010, 10:21:13 PM

Title: crear o importar proceso()
Post by: Futu-block on May 08, 2010, 10:21:13 PM
Señores, resulta que haciendo un juego por modulos, al hacer cosas faciles como ''si al pulsar un boton pasa tal y tal'' el resultado es extraño en ambos casos; si creo un proceso al ''begin o comienzo del proceso principal funciona sin problemas (lo de pulsar un boton), pero sin embargo al importar un proceso desde el principio a traves del impor, me dá ciertos problemillas...

quiero que me contrasteis si es verdad, es un fallo de bennu o por el contrario es de alguna manera es normal.

mientras tanto seguiré investigando en que grado falla... si falla
Title: Re: crear o importar proceso()
Post by: Fede on May 09, 2010, 07:56:05 AM
!Dios mio, voy a postear en una consulta¡ ;D

Por mi esperiencia, (muy pequeña), depende del sitio donde lo importes.

Y si encima tienes algún puntero perdido, ni te cuento.

A mi me daba errores de compilación, porque lo importaba antes de las definiciones de variables. Sólo lo puse después y ya está.

¡Y ahora que hablen los grandes! :D
Title: Re: crear o importar proceso()
Post by: Futu-block on May 09, 2010, 08:37:28 AM
punteros? todavia no se usarlos; yo no se como me salen juegos...

je je je
Title: Re: crear o importar proceso()
Post by: Fede on May 09, 2010, 10:06:13 AM
Que yo sepa, los punteros no han existido siempre. (Seguro que ahora viene alguien y me putea, pues cada vez que últimente estoy habriendo la voca para hablar de temás profundos, me la lian por metepatas.)  ;)

Te dan mucha potencia y flexibilidad, pero también un gran peligro de inestabilidad. Por lo menos a mí.

Pero no me imagino un mundo sin punteros. Será que ya me he acostumbrado a usarlos.

Curiosa manera de programar en los tiempos en que vivimos.  ;D

Por cierto, ¿has descubierto el fallo?.


Title: Re: crear o importar proceso()
Post by: Windgate on May 09, 2010, 01:41:27 PM
Tronco, pero sube el código que si no chungo xD

Yo siempre uso módulos, el comportamiento debería ser el mismo exactamente, salvo que hayas hecho el INCLUDE en mitad del código, un INCLUDE no tiene por qué ser sobre un módulo cerrado que empiece con PROCESS y termine con su END, puede tener fragmentos de código sueltos, y si lo incluyes dentro de un BEGIN-END se ejecutaría lo que lleva dentro...

Vamos, no sé si me explico bien, lo mejor es que subas el código y lo vemos.

Sobre punteros: Son útiles, cuesta comprender cómo funcionan al principio, pero luego son algo que no se olvida :D
Title: Re: crear o importar proceso()
Post by: SplinterGU on May 09, 2010, 06:00:00 PM
los punteros existen desde siempre.
Title: Re: crear o importar proceso()
Post by: Futu-block on May 09, 2010, 06:47:35 PM
curiosamente al hacer una prueba no me furula bien, asi que lo pongo aqui y lo repaso;

el programa verde con dos procesos, el del fondo (yo lo hago así por ahora) y el del jug1:
[code language="bennu"]program verde;


INCLUDE "DLL/import.prg";                 //Incluye las DLL necesarias para que todo funcione
INCLUDE "prg/jug2.prg";

BEGIN
   set_mode(320,240,32,mode_2xscale);
   load_fpg ("image/sonic.fpg");
   fondo(); jug1();
end


process fondo()

begin
   
   x = 160;
   y = 120;
   graph = 1;
   z = 20;
   loop
      if (key(_esc)) exit(); end
      frame;
   end
end

process jug1()
begin
   x = 100;
   y = 100;
   z = 1;
   graph = 5;
   loop
      if (key(_up)) y--; end
      if (key(_down)) y++; end
      frame;
   end
end[/code]

y el proceso importado o incluido:
[code language="bennu"]process jug2()

begin
   x = 300;
   y = 100;
   z = 1;
   graph = 5;
   loop
      if (key(_w)) y--; end
      if (key(_s)) y++; end
      frame;
   end
end

[/code]

lo repaso...

edito:
yolo entiendo, esta incluido pero no ''activado''
en cualquier momento del program hay que poner el
jug2();
Title: Re: crear o importar proceso()
Post by: Fede on May 09, 2010, 06:52:38 PM
Quote from: SplinterGU on May 09, 2010, 06:00:00 PM
los punteros existen desde siempre.

Lo sabia, lo sabia, que metía la pata.  :P

¿También existian con los primeros lenguajes?
Title: Re: crear o importar proceso()
Post by: Drumpi on May 09, 2010, 07:09:20 PM
Teniendo en cuenta que los primeros lenguajes eran placas metálicas con agujeros para introducir datos, no, los punteros no han existido siempre, sólo desde que existió la necesidad de consultar valores almacenados en memoria desde distintos puntos del programa ^^U
En Basic no recuerdo haber visto punteros, pero claro, yo no llegué a profundizar en la programación de mi viejo Amstrad.

Por cierto ¿soy el único que ha leido el primer mensaje y se ha quedado con cara de haba? o.O mi no entender.
:P
Title: Re: crear o importar proceso()
Post by: Fede on May 09, 2010, 07:16:14 PM
Es que en vuestros niveles avanzados no entendeis consultas superfluas.  :P

Traduzco: que está haciendo una cosa muy trivial, no le sale, y tiene la desfachatez de echarle la culpa al bennu.  :o jua,jua,jua.

La verdad es que no veo el fallo. Me lo acabo de descargar para probarlo en el portatil de la programación.

Tardaré un poco....
Title: Re: crear o importar proceso()
Post by: Windgate on May 09, 2010, 07:17:10 PM
¿Entonces ya está resuelto el problema?

En tu código veo que has incluido un módulo con un proceso, pero no lo has invocado, todo el código es correcto.
Title: Re: crear o importar proceso()
Post by: Fede on May 09, 2010, 07:46:24 PM
Probado con ligeras modificaciones de directorio, fpg e incluso activando el 2do proceso.

Funciona.

Lo que has puesto está bien, lo que importas no lo sé.

Besitos.

Edito.

He usado el último BennuPack. Te lo comento porque el primero que pillé por ahí no iba bien. Sería una versión muy antigua.
Title: Re: crear o importar proceso()
Post by: Futu-block on May 09, 2010, 07:54:58 PM
pues he seguido probandolo y no es eso presisamente, a ver si logro detectar lo que es...

Por cierto, que es exactamente un puntero?¿  si quereis decirlo
Title: Re: crear o importar proceso()
Post by: Windgate on May 09, 2010, 08:03:29 PM
Quote from: Futublog on May 09, 2010, 07:54:58 PM
pues he seguido probandolo y no es eso presisamente, a ver si logro detectar lo que es...

Por cierto, que es exactamente un puntero?¿  si quereis decirlo

Es una forma "distinta" de pasar una variable a un proceso, de forma que no reciba simplemente una copia del valor numérico que almacena, con un puntero le das total acceso a la variable y la puede modificar.

Formalmente, la forma habitual de pasar una variable es "por valor", mientras que usando puntero la pasas "por referencia".
Title: Re: crear o importar proceso()
Post by: Drumpi on May 10, 2010, 01:10:50 PM
Un puntero es una variable como otra cualquiera, pero en lugar de almacenar un número, lo que guarda es una dirección de memoria donde está el número que quieres consultar.

Por eso hay dos formas de consultar un puntero: por el método normal (mi_puntero) obtienes la dirección de memoria, que sólo puede ser usada por otras variables tipo puntero o por funciones que los pidan en los parámetros de entrada (esos que van tras process/function y el nombre); el otro método es leyendo el contenido (*mi_puntero), lo que hace es decirle al programa "vete a esta dirección y dime qué valor hay escrito", esa dirección puede ser una variable global, una variable de otro proceso existente y, en determinados casos, un valor de otro programa distinto (digo en determinados casos porque en un pasado esto podía provocar desastres en el sistema, y se usaba para crear virus, pero ahora el acceso fuera de memoria está muy controlado (ejem)).

El tema de punteros es muy ámplio y da para muchos capítulos en cualquier tutorial de programación, es casi la mitad de la programación básica. Dominarlos cuesta mucho, pero los beneficios son muy altos, no sólo en aprovechamiento de memoria, tambien facilita añadir o quitar cosas de listas, ordenarlas...
Title: Re: crear o importar proceso()
Post by: SplinterGU on May 10, 2010, 04:17:29 PM
bueno, un puntero almacena una direccion de memoria, hasta ahi venimos bien, pero tambien esa direccion de memoria es un numero.
Title: Re: crear o importar proceso()
Post by: Drumpi on May 10, 2010, 05:27:14 PM
Sí, es un número, pero no se trata como tal, al menos no en Bennu, donde siempre te va a dar error porque "se esperaba un puntero" o "se esperaba una struct/int/byte..." :P
Title: Re: crear o importar proceso()
Post by: Windgate on May 10, 2010, 07:44:27 PM
Hasta cierto punto se puede vivir sin punteros, en el peor caso a base de LOCAL y GLOBAL se puede hacer de todo, a costa de eficiencia.
Title: Re: crear o importar proceso()
Post by: Futu-block on May 10, 2010, 08:06:50 PM
puede usarse para guardar p. ej. records en la tabla de records?¿?¿?¿
Title: Re: crear o importar proceso()
Post by: Drumpi on May 10, 2010, 10:54:25 PM
Si, puede usarse, sobre todo porque simplifica la ordenación... siempre que tengas las funciones bien implementadas. Usar listas enlazadas a la larga es repetitivo, básicamente es siempre el mismo código, cambiando la estructura nodo (cada una de las partes de dicha lista) y la función de leer datos. Pero las primeras veces cuesta muchísimo hacerlas, da muchos errores difíciles de encontrar y requiere tener la mente clara y despejada (y según mi experiencia, el 85% de las veces, papel y boli a mano).

Pero si es una tabla de records estandar no es necesario: el número de posiciones es fija, bastaría tener X estructuras con una string (nombre) y un entero (puntos), no merece la pena complicarse más:

struct winners [9]
-string name;
-int points;
-int level;
...
end

struct winners [14]
-char name[3]; //sólo 4 letras para las iniciales
-int name;
...
end