Mi primera demo

Started by Yawin, January 15, 2011, 03:45:22 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

Te paso el ejemplo de fuego con Bennu, puedes cambiarle el color pulsando varias teclas (ahora que se pase Splinter a llenarme de karmas  ;D)
Te paso las paletas en adjunto.
No depende de ninguna dll, es Bennu 100%

PROGRAM fire;
GLOBAL
wind;
color;
flam=1;
count;
x1;
y1;
xstart;
xstop;
density=15;
sizeoffire=50;
heightoffire=1;
id1;
id2;

BEGIN
    load_pal("fire.pal");
    set_mode(320, 200, 8);
    set_fps(100,0);
    write(0,0,165,3,"Density:");
    write_int(0,100,165,3,&density);
    write(0,0,175,3,"Height of fire:");
    write_int(0,100,175,3,&heightoffire);
    write(0,0,185,3,"Size of fire:");
    write_int(0,100,185,3,&sizeoffire);
    write(0,0,195,3,"Wind:");
    write(0,175,165,3,"up and down");
    write(0,175,175,3,"1, 2 and 3");
    write(0,175,185,3,"left and right");
    write(0,175,195,3,"q=no, w=left and e=right");
    write(0,0,155,3,"Flame color:");
    write(0,175,155,3,"From z to n");
    write(0,160,10,4,"Press escape to quit");
    LOOP
        IF (flam==1) id2=write(0,100,155,3,"Normal"); END
        IF (flam==2) id2=write(0,100,155,3,"Blue"); END
        IF (flam==3) id2=write(0,100,155,3,"Lightblue"); END
        IF (flam==4) id2=write(0,100,155,3,"Green"); END
        IF (flam==5) id2=write(0,100,155,3,"Pink"); END
        IF (flam==6) id2=write(0,100,155,3,"Yellow"); END
        IF (wind==0) id1=write(0,100,195,3,"No wind"); END
        IF (wind==1) id1=write(0,100,195,3,"Left wind"); END
        IF (wind==2) id1=write(0,100,195,3,"Right wind"); END
        FOR(count=0; count<density; count++);
            xstart=rand(160-sizeoffire,160+sizeoffire);
            xstop=rand(160-sizeoffire,160+sizeoffire);
            put_pixel(xstop,150,0);
            put_pixel(xstop-1,150,0);
            put_pixel(xstop+1,150,0);
            put_pixel(xstart,150,rand(255,255));
            put_pixel(xstart-1,150,rand(255,255));
            put_pixel(xstart+1,150,rand(255,255));
        END
        IF (wind<>2)
            FOR(x1=90-sizeoffire; x1<220+sizeoffire; x1++);
                FROM y1=15 TO 149;
                    IF (wind==0) color=get_pixel(x1-1,y1)+get_pixel(x1+1,y1)+get_pixel(x1-1,y1+1)+get_pixel(x1,y1+1)+get_pixel(x1+1,y1+1); color=color/5; END
                    IF (wind==1) color=get_pixel(x1-1,y1)+get_pixel(x1,y1+1)+get_pixel(x1-1,y1+1); color=color/3; END
                    IF (color>2 and heightoffire==1) color=color-2; END
                    IF (color>2 and heightoffire==2) color=color-1; END
                    IF (wind==1 and color>1) color-=1; END
                    put_pixel(x1,y1,color);
                END
            END
        END
        IF (wind==2)
            FOR(x1=220+sizeoffire; x1>90-sizeoffire; x1--);
                FROM y1=15 TO 149;
                    IF (wind==2) color=get_pixel(x1+1,y1)+get_pixel(x1,y1+1)+get_pixel(x1+1,y1+1); color=color/3; END
                    IF (color>2 and heightoffire==1) color=color-2; END
                    IF (color>2 and heightoffire==2) color=color-1; END
                    IF (color>1) color-=1; END
                    put_pixel(x1,y1,color);
                END
            END
        END
    IF (key(_z) and flam<>1) flam=1; load_pal("fire.pal"); END
    IF (key(_x) and flam<>2) flam=2; load_pal("fireblue.pal"); END
    IF (key(_c) and flam<>3) flam=3; load_pal("firelblu.pal"); END
    IF (key(_v) and flam<>4) flam=4; load_pal("firegree.pal"); END
    IF (key(_b) and flam<>5) flam=5; load_pal("firepink.pal"); END
    IF (key(_n) and flam<>6) flam=6; load_pal("fireyell.pal"); END
    IF (key(_q)) wind=0; END
    IF (key(_w)) wind=1; END
    IF (key(_e)) wind=2; END
    IF (key(_1)) heightoffire=1; END
    IF (key(_2)) heightoffire=2; END
    IF (key(_3)) heightoffire=3; END
    IF (key(_up) and density<40) density++; END
    IF (key(_down) and density>0) density--; END
    IF (key(_esc)) exit("",0); END
    FOR(count=0;count<1600-sizeoffire;count++);
        put_pixel(count,150,0);
        END
    FOR(count=160+sizeoffire;count<320; count++);
        put_pixel(count,150,0);
        END
    IF (key(_left) and sizeoffire>1) sizeoffire-=1; END
    IF (key(_right) and sizeoffire<100) sizeoffire+=1; END
    FRAME;
    delete_text(id1);
    delete_text(id2);
    END
END


Yawin

por cierto, por todas partes aparece el comando put_pixel, que no es map_put_pixel que es el que empleo yo. Lo he buscado en la wiki, pero no existe ningún artículo sobre ello. Que carajo es y cómo carajo se emplea?
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

FreeYourMind

Pues se emplea como lo ves, que quieres que te diga  ;D

Yawin

si, pero me gustaría saber a qué corresponde cada argumento xD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

SplinterGU

Quote from: yawin on February 02, 2011, 10:35:01 AM
A ver, dos cosas:
-Splinter, ese código para qué sirve? Esque no lo pillo xD
-Free, iba a subir el código cuando hubiese acabado la demo. El problema es que intentando un efecto de fuego, me he estancado un poco xD

es el codigo del dcl que subi varios posts atras
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

Drumpi

Extraido de la ayuda oficial de Fenix 083b :P

PUT_PIXEL ( INT x, INT y, INT color )
Esta función permite alterar el color de un pixel determinado del fondo de pantalla. Las coordenadas dadas crecen hacia abajo y a la derecha, y el punto (0, 0) representa la esquina superior izquierda de pantalla.
En el caso del modo gráfico de 256 colores (8 bits), el valor de color debe ser un número de 0 a 255. En el caso de funcionar en modo gráfico de 16 bits, el valor es una codificación de las componentes del color que varía en función de la tarjeta de vídeo y el modo gráfico. Lo normal es usar la función RGB para obtener la codificación de un color concreto, o bien usar un color obtenido por una función como MAP_GET_PIXEL. El fondo de pantalla no admite pixels transparentes.
Esta función equivale a MAP_PUT_PIXEL (0, 0, x, y, color).

NOTAS:
En ocasiones es posible usar un fondo de 8 bits en un juego que funcione en modo de 16 bits. Normalmente, Fenix detecta cuando se da esta circunstancia. Por ejemplo, un juego que usa PUT_SCREEN con un mapa de 8 bits hace que se cree en fondo de pantalla de 8 bits. Sin embargo, una vez se utilice una función como PUT con un gráfico de 16 bits, el fondo se crea o se convierte a 16 bits y se mantiene así. Es importante tener en cuenta esta circunstancia porque a veces GET_PIXEL puede requerir un valor de 0 a 255 insospechadamente, a pesar de estar funcionando en 16 bits. Si quieres estar seguro de qué profundidad de color tiene el fondo de pantalla, utiliza la función GRAPHIC_INFO con el mapa (0, 0) y el parámetro G_DEPTH.

Parámetros:
INT x: Coordenada horizontal
INT y: Coordenada vertical
INT color: Color a dibujar

Ejemplo:
Program ejemplo_put_pixel;

Private
    x_punto;
    y_punto;
    color;

Begin
    Loop
        x_punto=rand(0, 319);
        y_punto=rand(0, 199);
        color=rand(0, 15);

        // Se ponen puntos en el fondo de la pantalla aleatoriamente
        put_pixel(x_punto, y_punto, color);

        Frame;     
       
        If(key(_esc)) Break; End
    End
End


MAP_PUT_PIXEL ( INT librería, INT gráfico, INT x, INT y, INT color )
Esta función permite alterar el color de un pixel determinado dentro de un gráfico. Las coordenadas dadas crecen hacia abajo y a la derecha, y el punto (0, 0) representa la esquina superior izquierda del gráfico.
En el caso de gráficos de 256 colores (8 bits), el valor de color debe ser un número de 0 a 255. En el caso de gráficos de 16 bits, el valor es una codificación de las componentes del color que varía en función de la tarjeta de vídeo y el modo gráfico. Lo normal es usar la función RGB para obtener la codificación de un color concreto, o bien usar un color obtenido por una función como MAP_GET_PIXEL. El color 0, tanto en 8 como en 16 bits, representa un pixel transparente.

Parámetros:
INT librería: Número de librería FPG
INT gráfico: Número de gráfico dentro de la librería
INT x: Coordenada horizontal
INT y: Coordenada vertical
INT color: Color a dibujar

Ejemplo:
Program ejemplo_map_put_pixel;
Private
    fichero1;
    coord_x;
    coord_y;
    color;

Begin
    fichero1=load_fpg("AyudaFenix083.fpg");
    graph=5;
    x=160;
    y=100;
    size=180;
    Loop
        coord_x=rand(0, 199);
        coord_y=rand(0, 199);
        color=rand(0, 15);

        // Se ponen puntos en el gr fico n£mero 5 del fichero1
        map_put_pixel(fichero1, 5, coord_x, coord_y, color);

        angle+=2000;
        Frame;                     
       
        If(key(_esc)) Break; End
    End
End
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)

Yawin

Muchas gracias. Te has ganado un karmón.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

Windgate

Quote from: yawin on February 02, 2011, 11:34:12 AM
por cierto, por todas partes aparece el comando put_pixel, que no es map_put_pixel que es el que empleo yo. Lo he buscado en la wiki, pero no existe ningún artículo sobre ello. Que carajo es y cómo carajo se emplea?

map_put_pixel dibuja sobre un mapa dado, put_pixel sobre la pantalla directamente ;D
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

FreeYourMind

O sea, todos se ganan karmones menos yo que he puesto el prg  >:(

SplinterGU

Quote from: FreeYourMind on February 02, 2011, 10:59:55 PM
O sea, todos se ganan karmones menos yo que he puesto el prg  >:(

cuando aprendas las relacion entre el maestro y el discipulo, y liberes tus codigos, vas a obtener muchos karmones.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Fede

Endeluego... ¡Que os gustan los piques!  ;D

Me divierto mucho leyendoos.  ;D

Splinter, no le pidás más a Free que es el portero. (Lo único que sabe hacer bién es darte la bienvenida. Jua, jua, jua.) (No te mosques, que después seguro que me lo haces pagar.  ;D)
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Yawin

Quote from: FreeYourMind on February 02, 2011, 10:59:55 PM
O sea, todos se ganan karmones menos yo que he puesto el prg  >:(

A ti te lo puse sin decirte nada ^__^ que si no te emocionas xD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

FreeYourMind

Lo digo porque el 78 parece que lleva años en el contador...

SplinterGU

Quote from: Fede on February 03, 2011, 06:26:16 AM
Endeluego... ¡Que os gustan los piques!  ;D

Me divierto mucho leyendoos.  ;D

Splinter, no le pidás más a Free que es el portero. (Lo único que sabe hacer bién es darte la bienvenida. Jua, jua, jua.) (No te mosques, que después seguro que me lo haces pagar.  ;D)

no me enojo con free, solo bromeo con el.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2