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. |