Witam serdecznie
Napotkałem na problem przy tworzeniu gry 2 osobowej. W skrócie gra ma polegać na odkrywaniu przez 2 graczy na przemian 2 ikonek na polu 6x6, jeśli odkryte ikony będą takie same to ikony zostają usunięte a w przeciwnym przypadku, turę rozpoczyna 2 gracz i ikony z powrotem zostają zakryte. Stworzyłem sobie w gtk+ planszę złożoną z 36 przycisków i do każdego podłączyłem funkcję wywoływaną przy zdarzeniu 'clicked'. I tutaj rodzi się mój problem. Poniżej wklejam kod mojej funkcji:
void odkryjObrazek(GtkButton *wcisniety_przycisk, gpointer numer_przycisku){
//odkrycie ikony przypisanej danemu numerowi przycisku, adres ikony jest zapisany w strukturze tab
GtkWidget *image;
image = gtk_image_new_from_file (tab[(int) numer_przycisku].obrazek);
gtk_button_set_image (wcisniety_przycisk, image);
/*warunek sprawdzajacy czy gracz nie nacisnal 2 tych samych przyciskow, czy jest to jego 2 ruch i czy obrazki sie zgadzaja, jesli tak to, przycisku zostaja usuniete i do tablicy znakow (ktora bede wykorzystywal do zapisania do potoku) sa zapisywane zera, zeby drugi proces wiedzial, ktore obrazki zostaly odkryte*/
if (((int) numer_przycisku != poprzedni) && iloscRuchow % 2 != 1 && (sprawdzenieObrazkow ((int) numer_przycisku, poprzedni) == 1)){
gtk_widget_destroy(GTK_WIDGET(przycisk[(int)numer_przycisku]));
gtk_widget_destroy(GTK_WIDGET(przycisk[poprzedni]));
obrazki[poprzedni] = 0;
obrazki[ (int)numer_przycisku ] = 0;
pozostalePrzyciski--;
iloscRuchow = 0;
}
/* ta petla jest wykonywana w momencie, kiedy gracz odkryje 2 inne ikony, zostana one zakryte i bedzie wykonany zapis do potoku, a potem program bedzie oczekiwal az drugi proces wykona swoj ruch, wiem, ze na razie brakuje odczytu informacji z potoku ale to pozniej.*/
else if ((int) numer_przycisku != poprzedni && iloscRuchow % 2 != 1){
GtkWidget *blank;
blank = gtk_image_new_from_file ("icons/blank.png");
gtk_button_set_image(GTK_BUTTON(przycisk[poprzedni]), blank);
fdcnt = open(fifocnt, O_WRONLY);
write(fdcnt, obrazki, sizeof(obrazki));
fdsrv = open(fifosrv, O_RDONLY);
read(fdsrv, obrazki, sizeof(obrazki));
}
poprzedni = (int) numer_przycisku;
iloscRuchow++;
}
Moim problemem jest to, ze po klikniecu 1 przycisku, ikona sie odkrywa i wszystko jest w porzadku, po nacisnieciu 2 (innej), nie zostaje ona odkryta tylko, przycisk zostaje wcisniety i wykonywana zostaje instrukcja czytania z potoku, ktora w funkcji jest zapisana pozniej od linijki w ktorej przyciskowi powinna zostać przypisana ikona. Dopiero po wykonaniu ruchu 2 gracza przycisk sie zwalnia i ikona sie odkrywa, a chcialbym zeby odkrywala sie od razu po kliknieciu i wtedy dopiero moglaby zostac wykonana komenda read. Nie wiem dlaczego tak sie dzieje i probowalem juz kilku rozwiazan i brakuje mi pomyslow. Jesli ktos bylby w stanie mi pomoc z gory serdecznie dziekuje.