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: #include <allegro.h>
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int mapa_x = 0, mapa_y = 0; BITMAP * teren = NULL; BITMAP * bufor = NULL;
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 };
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 ); } } };
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 ) ); 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; } teren = load_bmp( "teren.bmp", default_palette ); while( !key[ KEY_ESC ] ) { while( speed > 0 ) { 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--; } clear_to_color( bufor, makecol( 150, 150, 150 ) ); wys_mape(); blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); } remove_int( increment_speed ); destroy_bitmap( teren ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
|
|
SeaMonster131 |
» 2010-08-05 20:58:32 Jeśli masz map[17][14] To daj: 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 :) |
|
maciejo Temat założony przez niniejszego użytkownika |
» 2010-08-05 21:25:30 Nieaktualne |
|
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. |
|
SeaMonster131 |
» 2010-08-05 21:42:23 Tak, tak, ale już chyba znalazłem błąd: daj: 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] :) |
|
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 |
|
« 1 » |