kacperszef Temat założony przez niniejszego użytkownika |
[Allegro5, C] Zatwierdzenie wybranego pola » 2021-05-11 19:14:38 Witam mam kolejny problem z grą saper, gra losuje w tablicy określoną liczbę min a następnie uzupełnia pola w odniesieniu do tych min, samo rysowanie planszy, uzupełnienie pól działa poprawnie oraz poruszanie sie po mapie strzałkami działa jak najbardziej prawidłowo jednakże problem pojawia się w momencie gdy użytkownik wybierze pole, po wciśnięciu przycisku "enter" odpowiednia liczba pod kafelkiem sie pojawia, lecz gdy puści się "enter" liczba ponownie zmienia się na kafelek pusty. W kodzie umieszczę komentarz w którym miejscu mniej więcej występuje błąd. Z góry dziękuję za pomoc. #include <stdio.h> #include <time.h> #include <allegro5/allegro.h> #include <allegro5/allegro_font.h> #include <allegro5/allegro_ttf.h> #include <allegro5/allegro_image.h> #include <allegro5/allegro_acodec.h> #include <allegro5/allegro_audio.h> #include <allegro5/mouse.h> #include <allegro5/allegro_native_dialog.h>
int gra() { ALLEGRO_DISPLAY * ekran; ALLEGRO_EVENT_QUEUE * kolejka; ALLEGRO_TIMER * zegarek; ALLEGRO_BITMAP * tlo = NULL; ALLEGRO_BITMAP * title = NULL; ALLEGRO_SAMPLE * dzwiek = NULL; ALLEGRO_BITMAP * mina = NULL; ALLEGRO_BITMAP * jeden = NULL; ALLEGRO_BITMAP * dwa = NULL; ALLEGRO_BITMAP * trzy = NULL; ALLEGRO_BITMAP * piec = NULL; ALLEGRO_BITMAP * szesc = NULL; ALLEGRO_BITMAP * siedem = NULL; ALLEGRO_BITMAP * cztery = NULL; ALLEGRO_BITMAP * osiem = NULL; ALLEGRO_BITMAP * kasuj = NULL; ALLEGRO_BITMAP * koniec = NULL; ALLEGRO_FONT * czcionka; ALLEGRO_BITMAP * puste = NULL; ALLEGRO_BITMAP * kafelek = NULL; ALLEGRO_MOUSE_STATE myszka; ALLEGRO_KEYBOARD_STATE keyState; al_init(); ekran = al_create_display( 800, 700 ); kolejka = al_create_event_queue(); zegarek = al_create_timer( 0.5 / 5 ); czcionka = al_load_ttf_font( "YARDSALE.ttf", 64, 0 ); al_install_mouse(); al_init_image_addon(); al_install_audio(); al_init_font_addon(); al_init_ttf_addon(); al_init_acodec_addon(); al_install_keyboard(); al_register_event_source( kolejka, al_get_keyboard_event_source() ); al_register_event_source( kolejka, al_get_display_event_source( ekran ) ); al_register_event_source( kolejka, al_get_timer_event_source( zegarek ) ); al_register_event_source( kolejka, al_get_mouse_event_source() ); al_get_keyboard_state( & keyState ); al_reserve_samples( 1 ); dzwiek = al_load_sample( "war_sound.wav" ); mina = al_load_bitmap( "mina_ikona.png" ); jeden = al_load_bitmap( "jeden.png" ); dwa = al_load_bitmap( "dwa.png" ); trzy = al_load_bitmap( "trzy.png" ); cztery = al_load_bitmap( "cztery.png" ); piec = al_load_bitmap( "piec.png" ); szesc = al_load_bitmap( "szesc.png" ); siedem = al_load_bitmap( "siedem.png" ); osiem = al_load_bitmap( "osiem.png" ); puste = al_load_bitmap( "puste.png" ); kafelek = al_load_bitmap( "kafelek.png" ); kasuj = al_load_bitmap( "kasuj.png" ); koniec = al_load_bitmap( "koniec gry.png" ); srand( time( NULL ) ); char plansza[ 9 ][ 9 ]; int i = 0, j, z, h = 0, m = 0, licznik = 0, b = 64, wybory = 64, wartosc, k = 0, l = 0; for( i = 0; i < 20; i++ ) { j = rand() % 7; z = rand() % 7; plansza[ j ][ z ] = 9; } bool dziala = true, draw = true; al_init_image_addon(); al_get_mouse_state( & myszka ); al_start_timer( zegarek ); while( dziala ) { ALLEGRO_EVENT akcja; al_wait_for_event( kolejka, & akcja ); if( akcja.type == ALLEGRO_EVENT_TIMER ) { al_clear_to_color( al_map_rgba_f( 1, 1, 1, 1 ) ); for( h = 0; h < 8; h++ ) { for( m = 0; m < 8; m++ ) { licznik = 0; if( plansza[ h ][ m ] == 9 ) { wybory--; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); if( plansza[ h ][ m ] == 0 ) { al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); } } if( plansza[ h ][ m ] != 9 ) { if( plansza[ h - 1 ][ m - 1 ] == 9 ) { licznik++; } if( plansza[ h - 1 ][ m ] == 9 ) { licznik++; } if( plansza[ h - 1 ][ m + 1 ] == 9 ) { licznik++; } if( plansza[ h ][ m - 1 ] == 9 ) { licznik++; } if( plansza[ h ][ m + 1 ] == 9 ) { licznik++; } if( plansza[ h + 1 ][ m - 1 ] == 9 ) { licznik++; } if( plansza[ h + 1 ][ m ] == 9 ) { licznik++; } if( plansza[ h + 1 ][ m + 1 ] == 9 ) { licznik++; } switch( licznik ) { case 0: plansza[ h ][ m ] = 0; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; case 1: plansza[ h ][ m ] = 1; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; case 2: plansza[ h ][ m ] = 2; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; case 3: plansza[ h ][ m ] = 3; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; case 4: plansza[ h ][ m ] = 4; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; case 5: plansza[ h ][ m ] = 5; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; case 6: plansza[ h ][ m ] = 6; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; case 7: plansza[ h ][ m ] = 7; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; case 8: plansza[ h ][ m ] = 8; al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; default: al_draw_bitmap( kafelek, 20 + h * 67, 20 + m * 67, 0 ); break; } } } } if( akcja.type == ALLEGRO_EVENT_TIMER ) { al_get_keyboard_state( & keyState ); if( al_key_down( & keyState, ALLEGRO_KEY_UP ) ) l--; else if( al_key_down( & keyState, ALLEGRO_KEY_DOWN ) ) l++; else if( al_key_down( & keyState, ALLEGRO_KEY_RIGHT ) ) k++; else if( al_key_down( & keyState, ALLEGRO_KEY_LEFT ) ) k--; while( k == 8 ) { k = 0; } while( l == 8 ) { l = 0; } while( k == - 1 ) { k = 7; } while( l == - 1 ) { l = 7; } draw = true; wartosc = plansza[ k ][ l ]; } if( draw ) { al_draw_bitmap( kasuj, 20 + k * 67, 20 + l * 67, 0 ); } if( akcja.type == ALLEGRO_EVENT_TIMER ) { if( al_key_down( & keyState, ALLEGRO_KEY_ENTER ) ) { wybory--; switch( wartosc ) { case 0: al_draw_bitmap( puste, 20 + k * 67, 20 + l * 67, 0 ); break; case 1: al_draw_bitmap( jeden, 20 + k * 67, 20 + l * 67, 0 ); break; case 2: al_draw_bitmap( dwa, 20 + k * 67, 20 + l * 67, 0 ); break; case 3: al_draw_bitmap( trzy, 20 + k * 67, 20 + l * 67, 0 ); break; case 4: al_draw_bitmap( cztery, 20 + k * 67, 20 + l * 67, 0 ); break; case 5: al_draw_bitmap( piec, 20 + k * 67, 20 + l * 67, 0 ); break; case 6: al_draw_bitmap( szesc, 20 + k * 67, 20 + l * 67, 0 ); break; case 7: al_draw_bitmap( siedem, 20 + k * 67, 20 + l * 67, 0 ); break; case 8: al_draw_bitmap( osiem, 20 + k * 67, 20 + l * 67, 0 ); break; case 9: al_draw_bitmap( mina, 20 + k * 67, 20 + l * 67, 0 ); } } } while( wybory == 0 ) { al_destroy_display( ekran ); } } al_flip_display(); } al_destroy_display( ekran ); al_uninstall_keyboard(); al_destroy_timer( zegarek ); al_destroy_bitmap( title ); al_destroy_sample( dzwiek ); al_destroy_font( czcionka ); al_uninstall_mouse(); }
|