Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro5, C] Zatwierdzenie wybranego pola

Ostatnio zmodyfikowano 2021-05-12 08:17
Autor Wiadomość
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.
C/C++
#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 ];
   
//bool odslonietePola[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 ) );
           
//al_play_sample(dzwiek, 0.1, 0, 1, ALLEGRO_PLAYMODE_LOOP, NULL);
           
           
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;
                           
                       
}
                    }
                }
            }
           
// gdzieś w tych dwóch ifach występuje problem
            // !!!!!!!!!!!!!!!!!
           
           
           
           
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 )
           
{
               
//draw = false;
               
al_draw_bitmap( kasuj, 20 + k * 67, 20 + l * 67, 0 );
               
//al_flip_display();
               
           
}
           
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();
}
P-178600
pekfos
» 2021-05-11 21:14:13
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.
To zamiast rysować tylko gdy masz wcisnięty enter, niech wciśnięcie klawisza przestawia zmienną, która będzie później decydować czy coś ma być rysowane.
P-178601
kacperszef
Temat założony przez niniejszego użytkownika
» 2021-05-12 08:17:01
Dzięki spróbuje tak zrobić
P-178603
« 1 »
  Strona 1 z 1