Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro, C++] Problem wyświetlaniem mapy kafelkowej

Ostatnio zmodyfikowano 2010-08-05 22:19
Autor Wiadomość
maciejo
Temat założony przez niniejszego użytkownika
[Allegro, C++] Problem wyświetlaniem mapy kafelkowej
» 2010-08-05 20:31:48
Mam problem z robieniem mapy w Allegro , otóż , chciałem zrobić jakiegoś prostego Tower Defense'a ale już na początku mam problem , skopiowałem kod z tutorialu easykodera i mam problem , zmieniłem mapkę i jakby wszystko było ok , no to wtedy powinien zrobić się pasek z tego co jest '1' w pliku teren , ale nie działa , kod:
C/C++
#include <allegro.h>

// Inicjowanie timera
volatile long speed = 0;
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );

// Zmienne potrzebne do mapy
int mapa_x = 0, mapa_y = 0;
BITMAP * teren = NULL;
BITMAP * bufor = NULL;

// DEFINICJA MAPY
short int map[ 17 ][ 14 ] =
{
    1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
    1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
    1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
    1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
    1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
    1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
    1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0
};

// Funkcja wyświetlająca mapę:
void wys_mape()
{
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 17; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 14; licznik_y++ )
        {
            blit( teren, bufor,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 40,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 40,
            licznik_x * 40, licznik_y * 40, 40, 40 );
        }
    }
};

// Funkcja Główna
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 40 ) );
   
    // Tworzenie bufora
    bufor = create_bitmap( 640, 480 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
    // Ładowanie grafiki
    teren = load_bmp( "teren.bmp", default_palette );
   
   
    while( !key[ KEY_ESC ] )
    {
        while( speed > 0 )
        {
            // SCROLLOWANIE MAPY
            if(( key[ KEY_RIGHT ] ) &&( mapa_x < 0 ) ) { mapa_x = mapa_x + 1; } else
            if(( key[ KEY_LEFT ] ) &&( mapa_x > 0 ) ) { mapa_x = mapa_x - 1; } else
            if(( key[ KEY_DOWN ] ) &&( mapa_y < 0 ) ) { mapa_y = mapa_y + 1; } else
            if(( key[ KEY_UP ] ) &&( mapa_y > 0 ) ) { mapa_y = mapa_y - 1; }
            speed--;
        }
       
        // Czyszczenie bufora
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
       
        // Wyświetlanie mapy
        wys_mape();
       
        blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
    }
    // Usuwanie wszystkiego z pamięci.
    remove_int( increment_speed );
    destroy_bitmap( teren );
    destroy_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-20464
SeaMonster131
» 2010-08-05 20:58:32
Jeśli masz map[17][14]
To daj:
C/C++
// Funkcja wyświetlająca mapę:
void wys_mape()
{
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 14; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 17; licznik_y++ )
        {
            blit( teren, bufor,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 40,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 40,
            licznik_x * 40, licznik_y * 40, 40, 40 );
        }
    }
};
Zamieniłem licznik_x < 17 na licznik_x <14 i tak samo licznik_y < 14 na licznik_y < 17. Powinno pomóc :)
P-20465
maciejo
Temat założony przez niniejszego użytkownika
» 2010-08-05 21:25:30
Nieaktualne
P-20469
malan
» 2010-08-05 21:40:31
Zauważ, że licznik_x i licznik_y nie są wymiarami mapy, a szerokością i wysokością kafla.
P-20471
SeaMonster131
» 2010-08-05 21:42:23
Tak, tak, ale już chyba znalazłem błąd:
daj:
C/C++
short int map[ 14 ][ 17 ] =
{
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
U mnie wyświetla się na górze ten pasek :P
A zamieniłem z map[17][14] na map[14][17] :)
P-20472
maciejo
Temat założony przez niniejszego użytkownika
» 2010-08-05 22:19:35
Stary dzięki właśnie miałem pisać jeszcze jednego posta , ale mi wyjaśniłeś THX
P-20473
« 1 »
  Strona 1 z 1