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);
}
}
}
//---------------------------------------------------------------------------