Myslivius Temat założony przez niniejszego użytkownika  | 
» 2009-06-22 21:49:19 Moge wkleić i cały, może ktoś sobie skorzysta, jest to map editor do gry, której jeszcze nie ma xD Niech ktoś może sproboje to skompilować z tym If'em i bez tego IF'a, to zobaczy o co chodzi. Jeśli ktoś widzi jakieś błędy inne, to może odrazu mowić. #include <allegro.h> #include <string> #include <iostream> #include <fstream> #include <conio.h> #include <io.h> #include <list> 
 
  struct POLE {     short int numer_pliku;     short int warstwa;     bool kolizja; }; struct LISTA_BMP {     std::string nazwa;     short int numer;     short int polozenie;     short int wysokosc;     short int szerokosc; };
  bool kolizja( float x1, float y1, float s1, float w1, float x2, float y2, float s2, float w2 ) {     if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y2 && y1 <= y2 + w2 ) return( true );          return( false ); }
  std::string wczyt( BITMAP * bufor, int y, int x ) {     std::string napis;     char znak = 0;     while( 1 != 2 )     {         znak = readkey();         if( znak == 13 ) break;                  napis += znak;         if( znak == 8 ) { std::string napis1( napis, 0,( napis.length() - 2 ) ); napis = napis1;             rectfill( bufor, x, y, x +(( napis.length() + 1 ) * 8 ), y + 10, getpixel( bufor, x - 1, y - 1 ) ); }         textprintf_ex( bufor, font, x, y, makecol( 200, 200, 200 ), - 1, "% s ", napis.c_str() );         blit( bufor, screen, 0, 0, 0, 0, 640, 480 );      }     return napis; }
  void rysuj_siatke( BITMAP * bufor ) {     for( int q = 0; q <= 465; q += 31 ) vline( bufor, q + 5, 5, 470, makecol( 255, 255, 255 ) );          for( int w = 0; w <= 465; w += 31 ) hline( bufor, 5, w + 5, 470, makecol( 255, 255, 255 ) );      }
  std::list < std::string > znajdz_pliki( std::list < std::string > lista_plikow ) {     long uchwyt;     _finddata_t danePliku;     if(( uchwyt = _findfirst( "*.bmp", & danePliku ) ) != - 1 )     {         lista_plikow.clear();         do         {             lista_plikow.push_back( danePliku.name );         }         while( !_findnext( uchwyt, & danePliku ) );              }     return lista_plikow; }
 
 
 
  int main() {     allegro_init();     install_keyboard();     install_mouse();     set_color_depth( 16 );     set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0 );          enum STAN_MENU { M_NOWA_MAPA = 1, M_WCZYTAJ_MAPE = 2, M_WYJDZ = 3, M_WYBOR = 0, M_EDYCJA = 4 };     enum STAN_PROGRAMU { S_MENU, S_EDYTOR };     BITMAP * bufor = create_bitmap( 640, 480 );     BITMAP * pliki = NULL;     BITMAP * bitmap = NULL;     BITMAP * uzyte_bitmapy = NULL;     BITMAP * bitmapy = NULL;     BITMAP * bitmapy_lista = NULL;     BITMAP * wybrany = NULL;     bitmapy_lista = create_bitmap( 150, 290 );     clear_to_color( bitmapy_lista, makecol( 0, 0, 200 ) );     STAN_PROGRAMU stan_programu = S_MENU;     STAN_MENU stan_menu = M_WYBOR;     std::string nazwa_mapy;     std::list < std::string > lista_plikow;     std::list < std::string >::iterator L;     std::string nazwa_pojedynczego_pliku;     int licznik_y_plikow;     bool lista_pobrana = false;     bool nowa_bitmapa = false;     bool odswiez = true;     int pos_y_b = 0;     int pos_y = 0;     int aktualna_bitmapa =- 1;     short int ilosc_bmp;     int licznik_pos_y = 0;     int licznik_pos_y_b = 200;     std::string aktualny_plik_bmp;     std::string poprzedni_plik_bmp;     int dlugosc_bitmapy_pliki = 100;     int dlugosc_bitmapy_bitmapy_lista = 290;     int licznik_przejscia_L = 0;     int dlugosc_suwaka_gornego;     int dlugosc_suwaka_dolnego;     int dlugosc_bitmapy_uzytych_bmp = 0;     int szerokosc_bitmapy_uzytych_bmp = 0;     int liczba_plikow_na_liscie = 0;     short int aktualny_numer_pliku_bmp = 0;     bool tryb = false;     bool czy_jest_plik = false;     bool czy_dodano_do_listy = false;     int mapa_y = 0;     int mapa_x = 0;     POLE mapa[ 500 ][ 500 ];     for( int i = 0; i < 500; ++i )     for( int g = 0; g < 500; ++g )     { mapa[ i ][ g ].warstwa =- 1;         mapa[ i ][ g ].numer_pliku =- 1;         mapa[ i ][ g ].kolizja = false; }     std::list < BITMAP *> lista_bitmap_w_pliku;     LISTA_BMP lista_uzytych_plikow_bmp[ 100 ];     std::list < BITMAP *>::iterator B;     std::string txt;          while( stan_menu != M_WYJDZ && !key[ KEY_ESC ] )     {                  if( stan_programu == S_MENU )         {             rectfill( bufor, 230, 120, 420, 160, makecol( 128, 30, 30 ) );             rectfill( bufor, 230, 180, 420, 220, makecol( 128, 30, 30 ) );             rectfill( bufor, 230, 240, 420, 280, makecol( 128, 30, 30 ) );             textprintf_ex( bufor, font, 290, 140, makecol( 200, 200, 200 ), - 1, "NOWA MAPA" );             textprintf_ex( bufor, font, 280, 200, makecol( 200, 200, 200 ), - 1, "WCZYTAJ MAPE" );             textprintf_ex( bufor, font, 305, 260, makecol( 200, 200, 200 ), - 1, "WYJDZ" );             if( kolizja( 230, 120, 190, 40, mouse_x, mouse_y, 1, 1 ) ) floodfill( bufor, 231, 121, makecol( 20, 120, 20 ) );                          if( kolizja( 230, 180, 190, 40, mouse_x, mouse_y, 1, 1 ) ) floodfill( bufor, 231, 181, makecol( 20, 120, 20 ) );                          if( kolizja( 230, 240, 190, 40, mouse_x, mouse_y, 1, 1 ) ) floodfill( bufor, 231, 241, makecol( 20, 120, 20 ) );                          if( kolizja( 230, 120, 190, 40, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) { stan_programu = S_EDYTOR; stan_menu = M_NOWA_MAPA; }             if( kolizja( 230, 180, 190, 40, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) { stan_programu = S_EDYTOR; stan_menu = M_WCZYTAJ_MAPE; }             if( kolizja( 230, 240, 190, 40, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) { stan_programu = S_EDYTOR; stan_menu = M_WYJDZ; }         }                           if( stan_programu == S_EDYTOR )         {             if( stan_menu == M_NOWA_MAPA || stan_menu == M_WCZYTAJ_MAPE )             {                 clear_to_color( bufor, makecol( 100, 100, 100 ) );                  rectfill( bufor, 90, 220, 560, 240, makecol( 128, 30, 30 ) );                 textprintf_ex( bufor, font, 100, 225, makecol( 200, 200, 200 ), - 1, "Podaj nazwe mapy i nacisnij ENTER" );                 blit( bufor, screen, 0, 0, 0, 0, 640, 480 );                  clear_to_color( bufor, makecol( 100, 100, 100 ) );                  rectfill( bufor, 90, 220, 560, 240, makecol( 128, 30, 30 ) );                 nazwa_mapy =( wczyt( bufor, 225, 260 ) += ".txt" );                                  if( stan_menu == M_WCZYTAJ_MAPE )                 {                     std::fstream plik( nazwa_mapy.c_str(), std::ios::in );                     plik >> txt;                                          char bufor_m;                     int licznik_m = 0;                     int licznik_c = 0;                     int licznik_l = 0;                     std::string mapa_s[ 500 ][ 500 ];                                          do                     {                         do                         {                             bufor_m = txt[ licznik_c ];                             ++licznik_c;                             if( bufor_m == ',' ) break;                                                          lista_uzytych_plikow_bmp[ licznik_l ].nazwa += bufor_m;                             lista_uzytych_plikow_bmp[ licznik_l ].numer = licznik_l;                         } while( 1 != 2 );                                                  ++licznik_l;                     } while( txt[ licznik_c ] != '|' );                                          for( int v = 0; v < 500; ++v )                     for( int b = 0; b < 500; ++b )                          mapa_s[ v ][ b ] = "";                                          do                     {                         for( int v = 0; v < 500; ++v )                         for( int b = 0; b < 500; ++b )                         {                             do                             {                                 bufor_m = txt[ licznik_c ];                                 ++licznik_c;                                 if( bufor_m == ',' ) break;                                                                  mapa_s[ v ][ b ] += bufor_m;                             } while( 1 != 2 );                                                      }                         for( int v = 0; v < 500; ++v )                         for( int b = 0; b < 500; ++b )                         {                             mapa[ v ][ b ].numer_pliku = atoi( mapa_s[ v ][ b ].c_str() );                         }                     } while( txt[ licznik_c ] != '|' );                                          for( int v = 0; v < 500; ++v )                     for( int b = 0; b < 500; ++b )                          mapa_s[ v ][ b ] = "";                                          do                     {                         for( int v = 0; v < 500; ++v )                         for( int b = 0; b < 500; ++b )                         {                             do                             {                                 bufor_m = txt[ licznik_c ];                                 ++licznik_c;                                 if( bufor_m == ',' ) break;                                                                  mapa_s[ v ][ b ] += bufor_m;                             } while( 1 != 2 );                                                      }                         for( int v = 0; v < 500; ++v )                         for( int b = 0; b < 500; ++b )                         {                             mapa[ v ][ b ].kolizja = atoi( mapa_s[ v ][ b ].c_str() );                         }                     } while( txt[ licznik_c ] != '|' );                                          for( int v = 0; v < 500; ++v )                     for( int b = 0; b < 500; ++b )                          mapa_s[ v ][ b ] = "";                                          do                     {                         for( int v = 0; v < 500; ++v )                         for( int b = 0; b < 500; ++b )                         {                             do                             {                                 bufor_m = txt[ licznik_c ];                                 ++licznik_c;                                 if( bufor_m == ',' ) break;                                                                  mapa_s[ v ][ b ] += bufor_m;                             } while( 1 != 2 );                                                      }                         for( int v = 0; v < 500; ++v )                         for( int b = 0; b < 500; ++b )                         {                             mapa[ v ][ b ].warstwa = atoi( mapa_s[ v ][ b ].c_str() );                         }                     } while( txt[ licznik_c ] != '|' );                                      }                 stan_menu = M_EDYCJA;             }             if( stan_menu == M_EDYCJA )             {                                  rysuj_siatke( bufor );                                  if( czy_dodano_do_listy == true )                 {                     czy_dodano_do_listy = false;                     dlugosc_bitmapy_uzytych_bmp = 0;                     for( int G = 0; G < 100; ++G )                     {                         if( lista_uzytych_plikow_bmp[ G ].nazwa != "" )                         {                             bitmap = load_bitmap( lista_uzytych_plikow_bmp[ G ].nazwa.c_str(), default_palette );                             lista_uzytych_plikow_bmp[ G ].polozenie = dlugosc_bitmapy_uzytych_bmp;                             lista_uzytych_plikow_bmp[ G ].wysokosc = bitmap->h;                             lista_uzytych_plikow_bmp[ G ].szerokosc = bitmap->w;                             dlugosc_bitmapy_uzytych_bmp += bitmap->h;                             if( bitmap->w > szerokosc_bitmapy_uzytych_bmp ) szerokosc_bitmapy_uzytych_bmp = bitmap->w;                                                      }                     }                     uzyte_bitmapy = NULL;                     uzyte_bitmapy = create_bitmap( szerokosc_bitmapy_uzytych_bmp, dlugosc_bitmapy_uzytych_bmp );                     for( int G = 0; G < 100; ++G )                     {                         if( lista_uzytych_plikow_bmp[ G ].nazwa != "" )                         {                             bitmap = load_bitmap( lista_uzytych_plikow_bmp[ G ].nazwa.c_str(), default_palette );                             blit( bitmap, uzyte_bitmapy, 0, 0, 0, lista_uzytych_plikow_bmp[ G ].polozenie, bitmap->w, bitmap->h );                         }                     }                 }                                  if( tryb == false )                 {                     short int stary_numer =- 1;                     short int nowy_numer =- 1;                     int numerek =- 1;                     int licznik_y, licznik_x, licznik_w = 0;                     for( licznik_x = 0; licznik_x < 15; ++licznik_x )                     for( licznik_y = 0; licznik_y < 15; ++licznik_y )                     {                         nowy_numer = mapa[ licznik_y + mapa_y / 31 ][ licznik_x + mapa_x / 31 ].numer_pliku;                         if( nowy_numer != stary_numer && nowy_numer !=- 1 )                         {                             for( int G = 0; G < 100; ++G )                             {                                 if( lista_uzytych_plikow_bmp[ G ].numer == nowy_numer ) numerek = lista_uzytych_plikow_bmp[ G ].numer;                                                              }                             stary_numer = nowy_numer;                         }                         if( nowy_numer !=- 1 && mapa[ licznik_y + mapa_y / 31 ][ licznik_x + mapa_x / 31 ].warstwa !=- 1 && numerek !=- 1 )                         masked_blit( uzyte_bitmapy, bufor,                         (( mapa[ licznik_y + mapa_y / 31 ][ licznik_x + mapa_x / 31 ].warstwa %( lista_uzytych_plikow_bmp[ numerek ].szerokosc / 30 ) ) * 30 ),                         (( mapa[ licznik_y + mapa_y / 31 ][ licznik_x + mapa_x / 31 ].warstwa /( lista_uzytych_plikow_bmp[ numerek ].szerokosc / 30 ) ) * 30 ) + lista_uzytych_plikow_bmp[ numerek ].polozenie,                              licznik_x * 31 + 6, licznik_y * 31 + 6, 30, 30 );                                              }                                          for( int g = 0; g < 15; ++g )                     for( int i = 0; i < 15; ++i )                     {                         if( kolizja( 6 +( i * 31 ), 6 +( g * 31 ), 30, 30, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 )                         if( mouse_y < 470 && mouse_y > 6 && mouse_x < 470 && mouse_x > 6 )                         {                             mapa[ g ][ i +( mapa_x / 31 ) ].warstwa = aktualna_bitmapa;                             mapa[ g +( mapa_y / 31 ) ][ i +( mapa_x / 31 ) ].numer_pliku = aktualny_numer_pliku_bmp;                             czy_jest_plik = false;                             for( int G = 0; G < 100; ++G )                             {                                 if( lista_uzytych_plikow_bmp[ G ].nazwa == aktualny_plik_bmp ) { czy_jest_plik = true; aktualny_numer_pliku_bmp = lista_uzytych_plikow_bmp[ G ].numer; }                             }                             if( czy_jest_plik == false ) { aktualny_numer_pliku_bmp = liczba_plikow_na_liscie; lista_uzytych_plikow_bmp[ liczba_plikow_na_liscie ].numer = aktualny_numer_pliku_bmp; lista_uzytych_plikow_bmp[ liczba_plikow_na_liscie ].nazwa = aktualny_plik_bmp; czy_dodano_do_listy = true; ++liczba_plikow_na_liscie; }                         }                     }                 }                 else                 {                     int licznik_y, licznik_x, licznik_w = 0;                     for( licznik_x = 0; licznik_x < 15; ++licznik_x )                     for( licznik_y = 0; licznik_y < 15; ++licznik_y )                     {                         if( mapa[ licznik_y + mapa_y / 31 ][ licznik_x + mapa_x / 31 ].kolizja == true ) floodfill( bufor, licznik_x * 31 + 21, licznik_y * 31 + 21, makecol( 20, 120, 20 ) );                                              }                                          for( int g = 0; g < 15; ++g )                     for( int i = 0; i < 15; ++i )                     {                         if( kolizja( 6 +( i * 31 ), 6 +( g * 31 ), 30, 30, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) if( mouse_y < 470 && mouse_y > 6 && mouse_x < 470 && mouse_x > 6 ) mapa[ g +( mapa_y / 31 ) ][ i +( mapa_x / 31 ) ].kolizja = true;                                                  if( kolizja( 6 +( i * 31 ), 6 +( g * 31 ), 30, 30, mouse_x, mouse_y, 1, 1 ) && mouse_b == 2 ) if( mouse_y < 470 && mouse_y > 6 && mouse_x < 470 && mouse_x > 6 ) mapa[ g +( mapa_y / 31 ) ][ i +( mapa_x / 31 ) ].kolizja = false;                                              }                 }                                                   if(( key[ KEY_LEFT ] ) &&( mapa_x >= 31 ) ) { mapa_x -= 31; rest( 80 ); } else                 if(( key[ KEY_RIGHT ] ) &&( mapa_x < 15500 ) ) { mapa_x += 31; rest( 80 ); } else                 if(( key[ KEY_DOWN ] ) &&( mapa_y < 15500 ) ) { mapa_y += 31; rest( 80 ); } else                 if(( key[ KEY_UP ] ) &&( mapa_y >= 31 ) ) { mapa_y -= 31; rest( 80 ); }                                  if( lista_pobrana == false )                 {                     lista_plikow = znajdz_pliki( lista_plikow );                     licznik_przejscia_L = 0;                     licznik_y_plikow = 0;                     dlugosc_bitmapy_pliki = 100;                     for( L = lista_plikow.begin(); L != lista_plikow.end(); ++L )                     {                         if( licznik_przejscia_L > 8 ) dlugosc_bitmapy_pliki += 10;                                                  ++licznik_przejscia_L;                     }                     pliki = NULL;                     pliki = create_bitmap( 150, dlugosc_bitmapy_pliki );                     clear_to_color( pliki, makecol( 0, 0, 200 ) );                      for( L = lista_plikow.begin(); L != lista_plikow.end(); ++L )                     {                         licznik_y_plikow += 10;                         nazwa_pojedynczego_pliku =* L;                         textprintf_ex( pliki, font, 5, licznik_y_plikow, makecol( 200, 200, 200 ), - 1, "% s ", nazwa_pojedynczego_pliku.c_str() );                     }                     lista_pobrana = true;                 }                                                   blit( pliki, bufor, 0, pos_y, 480, 10, 150, 100 );                                  rectfill( bufor, 570, 135, 630, 160, makecol( 200, 200, 0 ) );                 textprintf_ex( bufor, font, 577, 145, makecol( 0, 0, 0 ), - 1, "ZAPISZ" );                                  rectfill( bufor, 480, 135, 490, 145, makecol( 200, 200, 0 ) );                 textprintf_ex( bufor, font, 495, 137, makecol( 0, 0, 0 ), - 1, "kolizijny" );                                  rectfill( bufor, 480, 150, 490, 160, makecol( 200, 200, 0 ) );                 textprintf_ex( bufor, font, 495, 152, makecol( 0, 0, 0 ), - 1, "normalny" );                                  if( tryb == false ) rectfill( bufor, 482, 152, 488, 158, makecol( 200, 0, 0 ) );                 else rectfill( bufor, 482, 137, 488, 143, makecol( 200, 0, 0 ) );                                  dlugosc_suwaka_gornego = static_cast < int >( 60.0 *( 100.0 / static_cast < float >( pliki->h ) ) );                 rectfill( bufor, 610, static_cast < int >( 60.0 / static_cast < float >( pliki->h ) * 100.0 ) * pos_y / 100 + 31, 629, static_cast < int >( 60.0 / static_cast < float >( pliki->h ) * 100.0 ) * pos_y / 100 + 31 + dlugosc_suwaka_gornego, makecol( 200, 0, 0 ) );                                  rectfill( bufor, 610, 10, 629, 30, makecol( 500, 200, 0 ) );                 triangle( bufor, 620, 15, 615, 25, 625, 25, makecol( 255, 0, 128 ) );                                  rectfill( bufor, 610, 90, 629, 109, makecol( 500, 200, 0 ) );                 triangle( bufor, 620, 105, 615, 95, 625, 95, makecol( 255, 0, 128 ) );                                  rectfill( bufor, 480, 110, 630, 130, makecol( 500, 0, 0 ) );                 textprintf_ex( bufor, font, 500, 116, makecol( 200, 200, 200 ), - 1, "ODSWIEZ LISTE" );                                  if( kolizja( 480, 135, 10, 10, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) tryb = true;                                  if( kolizja( 480, 150, 10, 10, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) tryb = false;                                  if( kolizja( 480, 110, 150, 20, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) { lista_pobrana = false; rectfill( bufor, 480, 110, 630, 130, makecol( 200, 200, 200 ) ); textprintf_ex( bufor, font, 500, 116, makecol( 0, 200, 0 ), - 1, "ODSWIEZ LISTE" ); }                                  if( kolizja( 610, 10, 30, 30, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) { --pos_y; rectfill( bufor, 610, 10, 629, 30, makecol( 200, 200, 200 ) ); triangle( bufor, 620, 15, 615, 25, 625, 25, makecol( 0, 200, 0 ) ); }                                  if( kolizja( 610, 90, 30, 30, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) { ++pos_y; rectfill( bufor, 610, 90, 629, 109, makecol( 200, 200, 200 ) ); triangle( bufor, 620, 105, 615, 95, 625, 95, makecol( 0, 200, 0 ) ); }                                  if( pos_y < 0 ) pos_y = 0;                                  if( pos_y >( dlugosc_bitmapy_pliki - 100 ) ) pos_y =( dlugosc_bitmapy_pliki - 100 );                                  licznik_pos_y = 20;                 for( L = lista_plikow.begin(); L != lista_plikow.end(); ++L )                 {                     if( kolizja( 480, licznik_pos_y - pos_y, 130, 10, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) if( mouse_y > 10 && mouse_y < 110 ) aktualny_plik_bmp =* L;                                          licznik_pos_y += 10;                 }                                  if( kolizja( 570, 135, 60, 25, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 )                 {                     rectfill( bufor, 570, 135, 630, 160, makecol( 200, 200, 200 ) );                     textprintf_ex( bufor, font, 577, 145, makecol( 0, 200, 0 ), - 1, "ZAPISZ" );                                          std::fstream plik( nazwa_mapy.c_str(), std::ios::out );                     txt = "";                     for( int G = 0; G < 100; ++G )                     {                         if( lista_uzytych_plikow_bmp[ G ].nazwa != "" )                         {                             txt += lista_uzytych_plikow_bmp[ G ].nazwa;                             txt += ',';                         }                     }                     txt += "|";                     char str[ 3 ];                     for( int a = 0; a < 500; ++a )                     for( int s = 0; s < 500; ++s )                     {                         itoa( mapa[ a ][ s ].numer_pliku, str, 10 );                         txt += str;                         txt += ',';                     }                     txt += "|";                     for( int a = 0; a < 500; ++a )                     for( int s = 0; s < 500; ++s )                     {                         if( mapa[ a ][ s ].kolizja == 0 ) txt += '0';                         else txt += '1';                                                  txt += ',';                     }                     txt += "|";                     for( int a = 0; a < 500; ++a )                     for( int s = 0; s < 500; ++s )                     {                         itoa( mapa[ a ][ s ].warstwa, str, 10 );                         txt += str;                         txt += ',';                     }                     txt += "|";                                          plik.write( & txt[ 0 ], txt.length() );                      txt = "";                 }                                                   rectfill( bufor, 480, 164, 629, 184, makecol( 0, 200, 0 ) );                 textprintf_ex( bufor, font, 485, 171, makecol( 0, 0, 0 ), - 1, "% s ", aktualny_plik_bmp.c_str() );                                  if( aktualny_plik_bmp != "" && aktualny_plik_bmp != poprzedni_plik_bmp )                 {                     bitmapy = load_bmp( aktualny_plik_bmp.c_str(), default_palette );                     ilosc_bmp =(( bitmapy->w / 30 ) *( bitmapy->h / 30 ) );                     dlugosc_bitmapy_bitmapy_lista = 290;                     if( ilosc_bmp / 3 > 7 ) dlugosc_bitmapy_bitmapy_lista +=( 35 *( ilosc_bmp / 3 - 7 ) + 15 );                                          bitmapy_lista = NULL;                     bitmapy_lista = create_bitmap( 150, dlugosc_bitmapy_bitmapy_lista );                     clear_to_color( bitmapy_lista, makecol( 0, 0, 200 ) );                     for( int i = 0; i != ilosc_bmp; ++i )                     {                         blit( bitmapy, bitmapy_lista,( i %( bitmapy->w / 30 ) ) * 30,( i /( bitmapy->w / 30 ) ) * 30, 15 +(( i % 3 ) * 35 ), 15 +(( i / 3 ) * 35 ), 30, 30 );                     }                     poprzedni_plik_bmp = aktualny_plik_bmp;                     nowa_bitmapa = true;                     bitmapy = NULL;                 }                                  blit( bitmapy_lista, bufor, 0, pos_y_b, 480, 185, 150, 290 );                                  dlugosc_suwaka_dolnego = static_cast < int >( 250.0 *( 290.0 / static_cast < float >( bitmapy_lista->h ) ) );                 rectfill( bufor, 610, static_cast < int >( 250.0 / static_cast < float >( bitmapy_lista->h ) * 100.0 ) * pos_y_b / 100 + 206, 629, static_cast < int >( 250.0 / static_cast < float >( bitmapy_lista->h ) * 100.0 ) * pos_y_b / 100 + 206 + dlugosc_suwaka_dolnego, makecol( 200, 0, 0 ) );                                  rectfill( bufor, 610, 185, 629, 205, makecol( 500, 200, 0 ) );                 triangle( bufor, 620, 190, 615, 200, 625, 200, makecol( 255, 0, 128 ) );                                  rectfill( bufor, 610, 455, 629, 474, makecol( 500, 200, 0 ) );                 triangle( bufor, 620, 470, 615, 460, 625, 460, makecol( 255, 0, 128 ) );                                  if( kolizja( 610, 185, 30, 30, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) { --pos_y_b; rectfill( bufor, 610, 185, 629, 205, makecol( 200, 200, 200 ) ); triangle( bufor, 620, 190, 615, 200, 625, 200, makecol( 0, 200, 0 ) ); }                                  if( kolizja( 610, 455, 30, 30, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) { ++pos_y_b; rectfill( bufor, 610, 455, 629, 474, makecol( 200, 200, 200 ) ); triangle( bufor, 620, 470, 615, 460, 625, 460, makecol( 0, 200, 0 ) ); }                                  if( pos_y_b < 0 ) pos_y_b = 0;                                  if( pos_y_b > dlugosc_bitmapy_bitmapy_lista - 290 ) pos_y_b = dlugosc_bitmapy_bitmapy_lista - 290;                                  for( int g = 0; g != 3; ++g )                 {                     for( int i = 0; i != ilosc_bmp / 3 + 1; ++i )                     {                         if( kolizja( 495 +( g * 35 ), 200 - pos_y_b + i * 35, 30, 30, mouse_x, mouse_y, 1, 1 ) && mouse_b == 1 ) if( i * 3 + g < ilosc_bmp && mouse_y > 185 && mouse_y < 475 ) aktualna_bitmapa = i * 3 + g;                                              }                 }             }                      }                  if( mouse_b == 2 ) aktualna_bitmapa =- 1;                  if( aktualny_plik_bmp != "" && aktualna_bitmapa !=- 1 && aktualna_bitmapa !=- 2 && nowa_bitmapa == true )         {             wybrany = load_bmp( aktualny_plik_bmp.c_str(), default_palette );             nowa_bitmapa = false;         }         if( aktualny_plik_bmp != "" && aktualna_bitmapa !=- 1 )         {             masked_blit( wybrany, bufor,( aktualna_bitmapa %( wybrany->w / 30 ) ) * 30,( aktualna_bitmapa /( wybrany->w / 30 ) ) * 30, mouse_x - 15, mouse_y - 15, 30, 30 );         }                  rectfill( bufor, mouse_x + 3, mouse_y + 3, mouse_x - 3, mouse_y - 3, makecol( 0, 0, 300 ) );         rectfill( bufor, mouse_x + 2, mouse_y + 2, mouse_x - 2, mouse_y - 2, makecol( 200, 200, 1 ) );                  blit( bufor, screen, 0, 0, 0, 0, 640, 480 );                  clear_to_color( bufor, makecol( 100, 100, 100 ) );              }     destroy_bitmap( uzyte_bitmapy );     destroy_bitmap( wybrany );     destroy_bitmap( bitmapy_lista );     destroy_bitmap( bitmapy );     destroy_bitmap( bitmap );     destroy_bitmap( bufor );     destroy_bitmap( pliki );     allegro_exit();     return 0; } END_OF_MAIN();
  EDIT Wiem juz co powoduje błąd: std::string mapa_s[ 500 ][ 500 ];
  Wystarczy, że zmniejszę liczbę pól mapy np. na [1][1]i po problemie, tyle że wtedy reszta kodu bedzie bez sensu. Może mi ktoś powiedzieć, czemu to powoduje błąd i czy można coś na to poradzić? A może to przez kompilator-używam Dev C**. Zresztą jak teraz pomyśle, to miłem ten problem wcześniej, gdy próbowałem zwykłą mapę zadeklarować z liczbą pól np.[1000][1000] Czyżby brakowało pamięci? EDIT 2 Poprawiłem już funkcję wczytującą, usuwając tą zmienną i zastępując ją zwykłym std::string mapa_s; Przebudowałem resztę, co ogromnie przyspieszy fuynkcję, bo pozbyłem się kilku pętli i zaoszczędziłem pamięć ;), ale moje pytanie czemu tamto powodowało błąd jest nadal aktualne.  |