Asociaciones y grupos de encuentro => Gamevelop => Mensaje iniciado por: incentivate en 04 de Octubre de 2017, 10:10:31 pm

Título: Necesito ayuda con mi juego en C ++ y Allegro
Publicado por: incentivate en 04 de Octubre de 2017, 10:10:31 pm
Hola a todos y gracias por leerme!
Estoy empezando en el tema de la programación y para la facultad me pidieron desarrollar un juego desde cero en C++ usando alguna librería de graficos. Yo elegi hacerlo con Allegro.
Mi problema es el siguiente. Tengo un buffer principal donde quiero imprimir mi personaje y algunas cosas más que irán surgiendo a medida que avanze. El problema es que cuando declaro el BITMAP *buffer en el main me lo reconoce y anda perfecto, pero cuando creo la clase Personaje y hago una función dentro de la clase, que se llama void imprimir_personaje(), donde se imprime la imagen del personaje sobre mi buffer principal, me dice que buffer no está declarado. Logicamente porque está declarado en el Main ... hasta acá todo bien .... el tema es que no se como declar el buffer para que pueda ser usado desde todos lados (ya que es mi buffer principal). Intente declararlo antes del Main y sigo teniendo el mismo problema. Intente poner el buffer en un .H (header) e incluirlo donde lo necesitaba pero me dice que tengo multiples declaraciones de tod lo que hay en el .H
Vi por ahí en foros que alguien nombraba algo de la palabra "extern" ... tambien intente con esto pero nadie explicaba bien como se usaba e implementaba ... igual no se si servirá para mi problema.
Alguna idea ??
Les dejo el código para que vean de lo que hablo:

#include <allegro.h>
#include "inicia.h"

void iniciar_allegro();

BITMAP *buffer; // ESTE ES MI BUFFER PRINCIPAL

int main()
{
    iniciar_allegro();

    BITMAP *prota  = load_bmp("lee.bmp",NULL);

    bool salir;
    int x,y;
    int ax,ay;
    int direccion;
    int animacion;
    int desplazamiento;

// inicializar vbles
    x = 10;
    y = 10;
    ax = 10;
    ay = 10;
    direccion = 0;
    animacion = 0;
    desplazamiento = 4;
    salir = false;

    while ( !salir )
    {

        clear_to_color(buffer, 0xaaaaaa);

        masked_blit(prota, buffer, animacion*26, direccion*47, x, y, 26,47);

        ax = x;
        ay = y;


        // teclas control usuario
        if ( key[KEY_UP] )
        {
            y-=desplazamiento;
            direccion = 1;
        }
        if ( key[KEY_DOWN] )
        {
            y+=desplazamiento;
            direccion = 0;
        }
        if ( key[KEY_LEFT] )
        {
            x-=desplazamiento;
            direccion = 2;
        }
        if ( key[KEY_RIGHT] )
        {
            x+=desplazamiento;
            direccion = 3;
        }
        if ( ax != x || ay != y )
        {
            // entra si a cambiado alguna de las variables x,y
            animacion++;
            if ( animacion > 2 ) animacion = 0;
        }

        // limites
        if ( x < 0 ) x = 0;
        if ( x > 760 ) x = 760;
        if ( y < 0 ) y = 0;
        if ( y > 565 ) y = 565;


        blit(buffer, screen, 0, 0, 0, 0, 800, 600);

        rest(60);

        // tecla de salida
        if ( key[KEY_ESC] ) salir = true;

    }

    destroy_bitmap(prota);
    destroy_bitmap(buffer);

    return 0;
}

END_OF_MAIN();

void iniciar_allegro()
{
    allegro_init();
    install_keyboard();

    set_color_depth(32);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
    buffer = create_bitmap(800, 600);
}



Desde ya muchas gracias a todos :D
Saludos,
Nacho
Título: Re:Necesito ayuda con mi juego en C ++ y Allegro
Publicado por: XÑA en 06 de Octubre de 2017, 12:52:08 pm
Mírate una cosa muy bonita que se llama #pragma once

Piensa que cada vez que estás haciendo un include estás añadiendo esa variable al cpp

Así que esto qeuda así:

En el .h
#pragma once

extern BITMAP *buffer;

En el cpp

BITMAP *buffer;
Título: Re:Necesito ayuda con mi juego en C ++ y Allegro
Publicado por: incentivate en 09 de Octubre de 2017, 01:16:41 am
Sos un GENIO !!!
No sabes lo que me ayudaste, hace dos semanas que estoy con el tema :D Ahora puedo seguir avanzando !!!
GRACIAS eternas !!!