• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gra memory card - problem z funkcją Sleep

Object Storage Arubacloud
0 głosów
154 wizyt
pytanie zadane 12 sierpnia 2018 w C i C++ przez Krzych0409 Nowicjusz (230 p.)

Witam

Kiedyś robiłem gierke w zapamiętywanie i zrezygnowałem, bo natrafiłem na pewien problem którego nie mogłem przeskoczyć. Funkcja Sleep() nie działa tak jak powinna. Po odkryciu drugiej kary, która jest inna od pierwszej chciałem żeby program zatrzymał się na 500ms, aby gracz zdążył tą drugą kartę zapamiętać. Wizualnie nie widać żeby druga karta się odkryła, ale wydaje mi się, że się odkrywa i od razu zakrywa, bo nie ma pary. Wstawiam poniżej wyrywek tam gdzie najprawdopodobniej tkwi błąd na przykładzie pierwszego pola.

C++ Builder 6.

Wycinek kodu: 

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

int p1, p2, p3, p4, p5, p6;
int polska;
int wegry;
int hiszpania;
int licznik;
int odkryte1, odkryte2; //jakie pole
int kraj1, kraj2;  // jakie kraje


Losowanie()
{
        int wybor;
        wybor=rand()%3+1;

        switch(wybor)
        {
                case 1: {
                        if(polska<2)
                        {
                                polska++;
                                return 1;
                        }
                        else Losowanie(); break;}

                case 2: {
                        if(wegry<2)
                        {
                                wegry++;
                                return 2;
                        }
                        else Losowanie(); break; }

                case 3:
                {
                        if(hiszpania<2)
                        {
                                hiszpania++;
                                return 3;
                        }
                        else Losowanie(); break; }
        }
}

//----------------------------------------------------------------------------------

void Wykrywanie (TImage* obrazek, int kraj)
{
        if(kraj==1) obrazek->Picture->LoadFromFile("1polska.bmp");
        else if(kraj==2) obrazek->Picture->LoadFromFile("2wegry.bmp");
        else if(kraj==3) obrazek->Picture->LoadFromFile("3hiszpania.bmp");
}

//----------------------------------------------------------------------------------
void Zakrywanie(TImage* obrazek)
{
        Sleep(500);
        obrazek->Picture->LoadFromFile("puste.bmp");
        obrazek->Enabled=true;
}
//----------------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
polska=0;
wegry=0;
hiszpania=0;
licznik=1;

        srand(time(NULL));
       Image1->Picture->LoadFromFile("puste.bmp");
       Image2->Picture->LoadFromFile("puste.bmp");
       Image3->Picture->LoadFromFile("puste.bmp");
       Image4->Picture->LoadFromFile("puste.bmp");
       Image5->Picture->LoadFromFile("puste.bmp");
       Image6->Picture->LoadFromFile("puste.bmp");
       p1=Losowanie();
       p2=Losowanie();
       p3=Losowanie();
       p4=Losowanie();
       p5=Losowanie();
       p6=Losowanie();
       Image1->Enabled=true;
       Image2->Enabled=true;
       Image3->Enabled=true;
       Image4->Enabled=true;
       Image5->Enabled=true;
       Image6->Enabled=true;
       Label1->Caption=IntToStr(p1);
       Label2->Caption=IntToStr(p2);
       Label3->Caption=IntToStr(p3);
       Label4->Caption=IntToStr(p4);
       Label5->Caption=IntToStr(p5);
       Label6->Caption=IntToStr(p6);
       Label7->Caption="-------";

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1Click(TObject *Sender)
{
        Image1->Enabled=false;
        if (licznik==1)
        {
        Wykrywanie(Image1, p1);
        kraj1=p1;
        odkryte1=1;
        licznik=2;
        }

        else if (licznik==2)
        {
        Wykrywanie(Image1, p1);  //Tutaj nie chce się wykryc lub tego nie widac bo sie od razu zakrywa
        Label7->Caption="AAAAA";  // To sie wykonuje po Sleep(500) które jest niżej.
        kraj2=p1;
        odkryte2=1;
        licznik=1;

                if (kraj1!=kraj2)
                {
                        Sleep(500);
                        switch (odkryte1)
                        {
                        case 1: Zakrywanie(Image1); break;
                        case 2: Zakrywanie(Image2); break;
                        case 3: Zakrywanie(Image3); break;
                        case 4: Zakrywanie(Image4); break;
                        case 5: Zakrywanie(Image5); break;
                        case 6: Zakrywanie(Image6); break;
                        }
                        Zakrywanie(Image1);
                }
        }
}
//---------------------------------------------------------------------------

 

1 odpowiedź

0 głosów
odpowiedź 13 sierpnia 2018 przez j23 Mędrzec (194,920 p.)
wybrane 13 sierpnia 2018 przez Krzych0409
 
Najlepsza

Daj między linie 129 i 130 wywołanie Application->ProcessMessages();

komentarz 13 sierpnia 2018 przez Krzych0409 Nowicjusz (230 p.)
Dzięki, pomogło. Możesz mi napisać jak działa ta funkcja?
komentarz 13 sierpnia 2018 przez j23 Mędrzec (194,920 p.)
edycja 13 sierpnia 2018 przez j23

W skrócie, funkcja ta wykonuje zalegające komunikaty okienkowe. W tym przypadku zapewne komunikat odmalowania okna, który zostaje wysłany (pośrednio, vide InvalidateRect) po załadowaniu obrazka z pliku.

Podobne pytania

0 głosów
1 odpowiedź 267 wizyt
pytanie zadane 27 października 2018 w C i C++ przez ZByszko Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 602 wizyt
pytanie zadane 28 sierpnia 2015 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 1,028 wizyt
pytanie zadane 9 listopada 2015 w C i C++ przez Evelek Nałogowiec (28,960 p.)

92,556 zapytań

141,404 odpowiedzi

319,562 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...