Komunikat 'stack overflow' podczas restartowania prostej gry.

0

Witam,

Postanowiłem stworzyć swój pierwszy samodzielny projekt - grę w odkrywanie par kart - na pamięć. Gra śmiga. Niestety natrafiłem na jeden problem: Stworzyłem guzik do resetowania gry. Po jego naciśnięciu jednak gra się nie zeruje lecz wywala błąd "project project1.exe raised exception class e stack overflow with message 'stack overflow'" i podkreśla linię

wybor = random(6)+1; 

W funkcji

void WybierzObrazek(TImage* obrazek)
{
 
        wybor = random(6)+1;
 
        switch(wybor)
        {
                case 1:
                {
                        if(licznik1 <= 1)
                        {
                                obrazek->Picture->LoadFromFile("img/p1.bmp");
                                obrazek->Tag = 1;
                                licznik1++;
                        }
                        else
                        {
                                WybierzObrazek(obrazek);
                        }
                }break;
                case 2:
                {
                        if(licznik2 <= 1)
                        {
                                obrazek->Picture->LoadFromFile("img/p2.bmp");
                                obrazek->Tag = 2;
                                licznik2++;
                        }
                        else WybierzObrazek(obrazek);
                }break;
                case 3:
                {
                        if(licznik3 <= 1)
                        {
                                obrazek->Picture->LoadFromFile("img/p3.bmp");
                                obrazek->Tag = 3;
                                licznik3++;
                        }
                        else WybierzObrazek(obrazek);
                }break;
                case 4:
                {
                        if(licznik4 <= 1)
                        {
                                obrazek->Picture->LoadFromFile("img/p4.bmp");
                                obrazek->Tag = 4;
                                licznik4++;
                        }
                        else WybierzObrazek(obrazek);
                }break;
                case 5:
                {
                        if(licznik5 <= 1)
                        {
                                obrazek->Picture->LoadFromFile("img/p5.bmp");
                                obrazek->Tag = 5;
                                licznik5++;
                        }
                        else WybierzObrazek(obrazek);
                }break;
                case 6:
                {
                        if(licznik6 <= 1)
                        {
                                obrazek->Picture->LoadFromFile("img/p6.bmp");
                                obrazek->Tag = 6;
                                licznik6++;
                        }
                        else WybierzObrazek(obrazek);
                }break;
        }//swich 

Kod guzika do resetowania gry:

 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        licznik1 = 0; licznik2 = 0; licznik3 = 0;
        licznik4 = 0; licznik5 = 0; licznik4 = 0;
 
        odkryte_karty = 0;
        odkryte_pary = 0;
 
        f1->Visible = false;
        f2->Visible = false;
        f3->Visible = false;
        f4->Visible = false;
        f5->Visible = false;
        f6->Visible = false;
        f7->Visible = false;
        f8->Visible = false;
        f9->Visible = false;
        f10->Visible = false;
        f11->Visible = false;
        f12->Visible = false;
 
     //   randomize();
 
        WybierzObrazek(f1);
        WybierzObrazek(f2);
        WybierzObrazek(f3);
        WybierzObrazek(f4);
        WybierzObrazek(f5);
        WybierzObrazek(f6);
        WybierzObrazek(f7);
        WybierzObrazek(f8);
        WybierzObrazek(f9);
        WybierzObrazek(f10);
        WybierzObrazek(f11);
        WybierzObrazek(f12);
 
}

W załączniku cały projekt.

Z góry dziękuję za pomoc

3
licznik4 = 0; licznik5 = 0; /* >>>> */licznik4 = 0/* <<<< */;

Szklana kula mówi mi, że o to Ci lipę robi. Kula mówi, że istnieje zmienna licznik6, ale jej nie zerujesz. Więc ma ona jakąś śmieciową wartość, ale uwaga! Ten kod czasami zadziała poprawnie, podobnie jak zepsuty zegarek. (no trochę inaczej ponieważ w Twoim programie nie będzie powtarzalności). Zadziała gdy śmieciową wartością zmiennej licznik6 będzie coś mniejszego od 2 (:

0

Działa! Dziękuję bardzo!

1 użytkowników online, w tym zalogowanych: 0, gości: 1