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

[Allegro, C++] Po uruchomieniu programu występuje błąd

Ostatnio zmodyfikowano 2010-05-29 18:14
Autor Wiadomość
Bartaz
Temat założony przez niniejszego użytkownika
[Allegro, C++] Po uruchomieniu programu występuje błąd
» 2010-05-29 15:24:46
Witam mam sobie taki kod(patrz nizej) i wszystko dziala(kompiluje sie)ale zaraz po tym jest ten błąd z "nie wysylaj" sprawdzalem i wszystkie bitmapy się wczytuje(bufor tez sie tworzy).
C/C++
#include <allegro.h>


//Zmienne globalne:
BITMAP * plansza = create_bitmap( 1000, 700 ); //Tworzę bitmapę wielkości ekranu
BITMAP * bufor = NULL;
BITMAP * kafelek1 = load_bmp( "trawa.bmp", default_palette );
BITMAP * kafelek2 = load_bmp( "palma.bmp", default_palette );
//itd.

int mapa[ 20 ][ 20 ] = //Mapa 20 na 20 kafli
{
    0, 1, 1, 1, 0, 1, 1
   
   
};

int szerokosc_kafla = 40, wysokosc_kafla = 40; //Każdy kafel ma wielkość 40 na 40 px

int map_x, map_y; //Pozycja mapy na osi x i y

void map( void )
{
    for( int x = 0; x > 10; x++ ) //Na osi x wyświetli 10 kafelków na raz
    {
        for( int y = 0; y > 10; y++ ) //Na osi y wyświetli 10 kafelków na raz
        {
            if( mapa[ x ][ y ] == 0 ) blit( kafelek1, plansza, 0, 0, map_x + x * szerokosc_kafla, y * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla ); //Jeśli aktualnie sprawdzany kafelek na mapie ma wartość 1 to wyświetl kafelek1 obok poprzedniego kafelka. Pierwszy kafelek jest wyświetlany w miejscu map_x i map_y
           
            if( mapa[ x ][ y ] == 1 ) blit( kafelek1, plansza, 0, 0, map_x + x * szerokosc_kafla, y * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla ); //Tu to samo
           
        }
    }
}
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 1000, 700, 0, 0 );
    bufor = create_bitmap( 1000, 700 );
    kafelek1 = load_bmp( "trawa.bmp", default_palette );
    kafelek2 = load_bmp( "palma.bmp", default_palette );
   
    while( !key[ KEY_ESC ] )
    {
        //Scrollowanie: (poprostu przesuwamy początek mapy)
        if( key[ KEY_RIGHT ] ) map_x++;
        else if( key[ KEY_LEFT ] ) map_x--;
        else if( key[ KEY_DOWN ] ) map_y++;
        else if( key[ KEY_UP ] ) map_y--;
       
        clear_to_color( bufor, makecol( 70, 70, 70 ) );
        map();
        masked_blit( bufor, screen, 0, 0, 0, 0, 1000, 700 );
    }
    allegro_exit();
    return( 0 );
}
END_OF_MAIN();
P-17275
ison
» 2010-05-29 15:35:02
w tym miejscu:

BITMAP *plansza = create_bitmap(1000,700);
BITMAP *bufor=NULL;
BITMAP *kafelek1 = load_bmp("trawa.bmp",default_palette);
BITMAP *kafelek2 = load_bmp("palma.bmp",default_palette);

musisz wywalic wczytywanie i tworzenie bitmap. Nie mozesz tego robic na globalu.

zatem tak powinien wygladac wyzej przedstawiony fragment kodu:

BITMAP *plansza=NULL;
BITMAP *bufor=NULL;
BITMAP *kafelek1=NULL;
BITMAP *kafelek2=NULL;
P-17276
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-05-29 15:36:48
Ok dziala ale nic oprocz bufora sie nie wyswietla
no i nie moge zrobic np czegos takiego
int mapa[20][20]=//Mapa 20 na 20 kafli
{
0,1,1,1,
1,0,1,1


};

tylko musi byc tak
int mapa[20][20]=//Mapa 20 na 20 kafli
{
0,1,1,1,



};
P-17277
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-05-29 15:38:13
Dobra juz naprawilem powinno byc short int
ale nadal oprocz bufora  nic sie  nie wyswietla.
P-17278
ison
» 2010-05-29 15:39:45
bo jak masz dwuwymiarowa tablice to inaczej podpisujesz do niej wartosci.
musisz tworzyć zbiory zbriorów. I tak wg mnie lepiej mape wczytywac jest z pliku(znacznie lepiej) ale jak juz sie uparles to masz:

int map[10][10]=
{
   {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},
   // itd...
};

tak przy okazji to wysokosci i szerokosci bitmap nie musisz trzymac w zmiennych. Zeby odczytac szerokosc bitmapy robisz: jakas_bitmapa->w, a wysokosc: jakas_bitmapa->h

w twoim kodzie jest bardzo dużo błędów, między innymi sam for jest źle napisany i się wcale nie wykonuje zamiast '>' powinno byc '<'
P-17279
Bartaz
Temat założony przez niniejszego użytkownika
..
» 2010-05-29 15:44:32
Nadal sie nic nie wyswietla :(
P-17280
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-05-29 15:45:05
Kod do wyswietlania mapy nie jest moj tylko z tego forum.
P-17281
ison
» 2010-05-29 15:47:58
kod jest napisany słabo i niestarannie, ja bym go od nowa zaczął pisać.
Radzę najpierw wziąć się za podstawy C++.

tutaj ten sam kod tylko że poprawiony(tak żeby działał)
C/C++
#include <allegro.h>

BITMAP * plansza;
BITMAP * bufor = NULL;
BITMAP * kafelek1;
BITMAP * kafelek2;

int mapa[ 10 ][ 10 ] =
{
    { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

int szerokosc_kafla = 40, wysokosc_kafla = 40;

int map_x = 0, map_y = 0;

void map()
{
    for( int x = 0; x < 10; x++ )
    {
        for( int y = 0; y < 10; y++ )
        {
            if( mapa[ x ][ y ] == 0 ) blit( kafelek1, plansza, 0, 0, map_x + y * szerokosc_kafla, x * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla );
           
            if( mapa[ x ][ y ] == 1 ) blit( kafelek2, plansza, 0, 0, map_x + y * szerokosc_kafla, x * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla );
           
        }
    }
}
int main()
{
    allegro_init();
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 1000, 700, 0, 0 );
    bufor = create_bitmap( 1000, 700 );
    plansza = create_bitmap( 1000, 700 );
    kafelek1 = load_bmp( "trawa.bmp", default_palette );
    kafelek2 = load_bmp( "palma.bmp", default_palette );
    install_keyboard();
   
    while( !key[ KEY_ESC ] )
    {
        if( key[ KEY_RIGHT ] ) map_x++;
        else if( key[ KEY_LEFT ] ) map_x--;
        else if( key[ KEY_DOWN ] ) map_y++;
        else if( key[ KEY_UP ] ) map_y--;
       
        clear_to_color( bufor, makecol( 70, 70, 70 ) );
        clear_to_color( plansza, makecol( 0, 0, 0 ) );
        map();
        blit( plansza, bufor, 0, 0, 0, 0, plansza->w, plansza->h );
        blit( bufor, screen, 0, 0, 0, 0, 1000, 700 );
    }
    allegro_exit();
    return( 0 );
}
END_OF_MAIN();
P-17283
« 1 » 2
  Strona 1 z 2 Następna strona