¿La palabra clave CLONE ha desaparecido?

Started by osk, September 25, 2009, 04:56:47 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

osk

Hola chicos.
Pues eso: he intentado probar el ejemplo que viene en la wiki pero no me reconoce el comando (mejor dicho, palabra clave). ¿Se ha retirado del lenguaje por alguna razón?
Venga, gracias.

SplinterGU

no se ha retirado...

existe, y es nativa del engine... no depende de ningun modulo.

no se que ejemplo hay en la wiki...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

http://wiki.bennugd.org/index.php?title=Clone
yo lo he probado y tampoco va, le he insertado todos los mods y adaptado a la filosofía c pero nada, sigue diciendo que clone no es un identificador válido
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

ese codigo esta mal, no se de donde salio que clone devuelve valor...

ejemplo funcional:


import "mod_key";
import "mod_map";
import "mod_video";
import "mod_proc";

Process Main()
Begin

    squares();

    repeat
        frame;
    until(key(_ESC));

    exit();

End

Process squares()
Private
   int advance;
Begin

    graph = new_map(5,5,16);
    map_clear(0,graph,rgb(255,0,255));
    advance = 1;

    clone
        graph = map_clone( 0, graph );
        map_clear(0,graph,rgb(255,255,255));
        advance = 2;
    end

    loop
        x += advance;
        frame;
    end
    unload_map(0,graph);

End

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

SplinterGU

extraido del help del div2:

Sentencia CLONE


CLONE
<sentencia> ;
...
END

Esta sentencia crea un nuevo proceso idéntico al actual, con la salvedad de que las sentencias entre las palabras reservadas CLONE y END se ejecutarán únicamente en el nuevo proceso y no en el actual.

Por ejemplo, si cualquier proceso del programa, con unas coordenadas (x, y) determinadas y un gráfico (graph) concreto, ejecuta la siguiente sentencia:

CLONE
x=x+100;
END

Se creará un nuevo proceso identico a él, con el mismo gráfico y los mismos valores en todas sus variables, a excepción de la coordenada x, que el nuevo proceso tendrá 100 puntos más a la derecha.

Esta sentencia se utiliza para crear réplicas de un proceso, dividirlo en dos procesos (casi) iguales.

Ejemplo:
PROGRAM mi_juego;
BEGIN
    // ...
    x=0;
    y=0;
    CLONE
        x=x+10;
    END
    CLONE
        y=y+10;
    END
    // ...
END





En este ejemplo, las 2 sentencias CLONE crearán 3 copias del proceso principal (y no 2, como podría haberse esperado).

Al ejecutarse la primera sentencia CLONE se creará un nuevo proceso, con lo que habrá 2: uno en (x=0, y=0) y otro en (x=10, y=0). Y estos dos procesos ejecutarán la segunda sentencia CLONE, el primero (el original) creando con ello un nuevo proceso en (x=0, y=10), y el segundo creará el nuevo proceso en (x=10, y=10).

Para crearse únicamente 2 copias del proceso original se podría haber construido el programa, por ejemplo, de la siguiente forma:

Ejemplo:
PROGRAM mi_juego;
BEGIN
    // ...
    x=0;
    y=0;
    CLONE
        x=x+10;
        CLONE
            y=y+10;
        END
    END
    // ...
END





El proceso original (x=0, y=0) creará uno en (x=10, y=0) y éste, a su vez, otro en (x=10, y=10), creandose únicamente dos copias del original.

Se debe, por tanto, tener mucho cuidado con el uso de la sentencia CLONE de forma secuencial o dentro de un bucle, pues se debe contar con que los primeros 'clones' pueden crear, a su vez, a nuevos 'clones'.

Esta sentencia permite usarse sin poner sentencias entre las palabras CLONE y END. Pero, al menos en un principio, no parece tener mucho sentido el querer tener dos procesos idénticos, con las mismas coordenadas, el mismo gráfico y ejecutando el mismo código.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

pues ya está solventado en la wiki.
Aunque es raro, la forma anterior se parecía al fork de c en linux.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

osk


SplinterGU

obvio que parecia al fork de linux, pero no se quien lo puso asi, si fue alguien que se equivoco o alguien que quiso destruir el wiki...

las participaciones del wiki son con registro de usuarios?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

#9
sí y no. :D
No te lo vas a creer, pero fuí yo el que creé la entrada en Julio de este año.
Sorry por el malentendido,mea culpa, extraje esa información de una conversación tuya anterior en la que dijiste que era como un fork y yo la tomé al pie de la letra parece ser.
http://forum.bennugd.org/index.php?topic=654.msg9481#msg9481

Lo que no entiendo es cómo que no probé el ejemplo antes. :(
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

bueno, yo tambien tengo parte de culpa, esas respuestas las habia hecho muy escuetas porque estaba con apuros... y no aclare que era como un fork en el sentido de la funcionalidad, pero no del uso a nivel tecnico de la misma...

gracias por la correccion y disculpas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2