pasemos a las funciones...

Started by Futu-block, July 29, 2011, 09:36:07 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block

En mis ultimos juegos he usado varios procesos que no tenian graficos y principalmente lo que hacian era una operacion matematica...

Para comprender mejor lo que es una función vamos a desglosarla (crap, esto esta sonando a tuto en vez de consulta)

1· En vez de proceso le llamariamo funtion ejemplo(), (creo) pero ¿se guardaria como .prg??

2· A la hora de importarlo en el main, ¿seria include "ejemplo.prg"??

3· Para llamar a la funcion, ¿como es la sintaxis exacta??
para un ejemplo pongo que dividimos la pantalla en dos partes y al hacer click con el raton nos indique el mouse.x si está en la mitad de la derecha o de la izquierda...


[code language="bennu"]
funtion ejemplo()
    if (mouse.x > 160)
        return true;
    else
        return false;
   end
[/code]

no se, aqui hay mucho espacio en blanco; a lo que me lleva a la cuarta

4· El return que te devuelve donde vá?? y si tiene que ser[code language="bennu" options="singleline"] return = false;[/code]

yo que se, ni idea ninguna, y del manual no creais que me entero de mucho, yo soy mas de comprender, no de copiar :D

Rein (K´)ah Al-Ghul

1. en un PRG (el archivo de texto). puedes tener varias funciones y/o procesos...
2. al incluirlo en el PRG principal, lo haces con include <ruta del archivo prg>

3.

a grandes rasgos es:
FUNCTION name( <parametros>)
BEGIN
    <sentencias>
END

en caso de retornar un valor se usa la sentencia return(<valor de retorno>), con lo cual se sale de la funcion...

para la sintaxis completa esta en la wiki:
http://wiki.bennugd.org/index.php?title=Function

un ejemplo rapido
FUNCTION sumarDosNumeros( int operando1, int operando2)
PRIVATE
int resultado = 0;
END

BEGIN
resultado = operando1 + operando2;
return( resultado )
END


ahora al usarla

Quote
BEGIN
//...
variableAleatorio = sumarDosNumeros(2,4);
variableAleatorio = sumarDosNumeros(cualquierVariableEntera, OtraVariableEntera);
//...
END

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

KeoH

hazle caso a Rein (K´)ah Al-Ghul q lo ha dicho perfectamente xD   el funcionamiento es igual a un proceso salvo en q no tiene grafico y q no tienes q pasarle en ningun momento por un Frame;.


Futu-block

vamos a ver si lo hago bien


FUNCTION la_x_del_raton()
PRIVATE
int cuarta_parte;
END

BEGIN
    switch (mouse.x)
        case 1..80: cuarta_parte = 1;
        case 81..160: cuarta_parte = 2;
        case 161..240: cuarta_parte = 3;
        case 241..320: cuarta_parte = 4;
    end
    return (cuarta_parte)   // aqui no termina con el punto y coma por lo que veo, ¿no?
END


y ahora cada vez que dé al click del raton, que es para lo que lo quiero usar...


BEGIN
//...
mouse.left = la_x_del_raton();
//...
END


creo que estoy en lo cierto ¿no?

Mr Matsusaka

Solo le veo un problema.
mouse.left es una variable reservada del programa utilizada para indicar si se ha clickeado el raton o no.
No te conviene sobreescribirlo, deberias crear una variable distinta que coja el valor del return.

Ademas, por si acaso yo pondria algo asi

[code language="bennu"]FUNCTION la_x_del_raton()
PRIVATE
int cuarta_parte;
END

BEGIN
   if (mouse.left == false)
      return (0);
   else
      switch (mouse.x)
          case 1..80: cuarta_parte = 1;
          case 81..160: cuarta_parte = 2;
          case 161..240: cuarta_parte = 3;
          case 241..320: cuarta_parte = 4;
      end
      return (cuarta_parte);
  end
END[/code]

laghengar

Amigo futublog, te recomiendo que nos comentes que quieres llegar a hacer, te diremos como hacerlo y porqué ha de hacerse así.

Sencillamente es que:

BEGIN
//...
mouse.left = la_x_del_raton();
//...
END

no tiene ningún sentido, con todos los respetos XD.

la_x_del_raton(); te va a dar un valor al igual que te lo da un proceso como en id=proceso; y ese valor va determinado por el return que hay dentro de la función. Por lo que le estás diciendo que mouse.left tome como valor lo que le asigne return de la función la_x_del_raton().

Un saludo XD.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Futu-block

por lo pront lo que quiero es hacer bien el uso de las funciones

Rein (K´)ah Al-Ghul

return si va con ; descuido mio :P

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

SplinterGU

Quote from: KeoH on July 30, 2011, 02:30:58 AM
hazle caso a Rein (K´)ah Al-Ghul q lo ha dicho perfectamente xD   el funcionamiento es igual a un proceso salvo en q no tiene grafico y q no tienes q pasarle en ningun momento por un Frame;.



no, no... creo que hay una terrible confusion...

el uso de FRAME y graph, no dependen de si se lo usa en un PROCESS o en una FUNCTION... ambos pueden usar FRAME y graph... y es totalmente permitido.

la diferencia entre un PROCESS y una FUNCTION esta en que:
- un PROCESS retorna (a quien llamo) mediante la instruccion FRAME (con lo que devuelve el ID de proceso que es) o mediante un RETURN (con lo que devuelve el valor de retorno y finaliza su ejecucion).
- una FUNCTION solo retorna (a quien llamo) con la instruccion RETURN, si se ejecuta un FRAME, no retorna a quien llamo, pero si da paso a que otro proceso se ejecute, el padre (quien llamo) se queda congelado hasta que la funcion muera o haga un RETURN. Por consiguiente, se puede hacer una funcion que tenga un grafico y este se este moviendo y ejecutando FRAMEs como cualquier PROCESO, salvo que el padre no podra seguir su ejecucion hasta que la funcion retorne con un RETURN.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

es como lo de los numeros al azar que propuse, como en la siguiente casilla el numero al azar no salia por el random se llevaba asi ifinito de tiempo ¿no?

<->


bien, por fin de tanta prueba he sacado algo razonable ¿quien quiere karma??

Futu-block

¿puede una funcion retornar dos valores??

return(tal, cual);

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

Futublock, yo cree que para eso se inventaron los punteros xDD Si quieres retornar dos valores, uno de ellos (al menos) cambialo con un puntero.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Drumpi

O si no, usa un tipo personalizado con los datos que necesites devolver, pero por lo general, el uso de punteros es lo suyo.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

Pasemos a los punteros pues...
¿que es un puntero???

jijiji