AP1994 Temat założony przez niniejszego użytkownika |
Funkcja wyświetlająca mapę z pliku png » 2022-09-25 01:35:22 Napisałem kiedyś kawałek kodu: void draw_map( vector < vector < int > > mapy, ALLEGRO_BITMAP * plik ) { const int szr = 32, wys = 32; if( plik != NULL ) { if( !mapy.empty() ) { int s = al_get_bitmap_width( plik ) / szr; for( int i = 0; i <( int ) mapy.size(); i++ ) { for( int j = 0; j <( int ) mapy[ i ].size(); j++ ) { if( mapy[ i ][ j ] <=( 0 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 0 ) ) * szr, wys * 0, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 1 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 1 ) ) * szr, wys * 1, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 2 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 2 ) ) * szr, wys * 2, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 3 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 3 ) ) * szr, wys * 3, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 4 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 4 ) ) * szr, wys * 4, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 5 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 5 ) ) * szr, wys * 5, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 6 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 6 ) ) * szr, wys * 6, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 7 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 7 ) ) * szr, wys * 7, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 8 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 8 ) ) * szr, wys * 8, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 9 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 9 ) ) * szr, wys * 9, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 10 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 10 ) ) * szr, wys * 10, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 11 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 11 ) ) * szr, wys * 11, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 12 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 12 ) ) * szr, wys * 12, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 13 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 13 ) ) * szr, wys * 13, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 14 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 14 ) ) * szr, wys * 14, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 15 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 15 ) ) * szr, wys * 15, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 16 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 16 ) ) * szr, wys * 16, szr, wys, i * szr, j * wys, 0 ); else if( mapy[ i ][ j ] <=( 17 * s ) + s - 1 ) al_draw_bitmap_region( plik,( mapy[ i ][ j ] -( s * 17 ) ) * szr, wys * 17, szr, wys, i * szr, j * wys, 0 ); } } } } else { al_show_native_message_box( 0, "Błąd wywołania", "Błąd grafiki", "Brak pliku textury", 0, ALLEGRO_MESSAGEBOX_ERROR ); exit( EXIT_FAILURE ); } }
Problem polega na tym, że nie umiem go usprawnić na tyle, żeby nie trzeba było dodawać nowych linii kodu za każdym razem, kiedy tylko wezmę większy plik png. |