Kółko i krzyżyk - sprawdzanie wygranej

0

Witajcie, piszę aktualnie grę Kółko i krzyżyk. Z założenia rozmiar planszy jest podawany przez użytkownika, tak samo jak ilość znaków w jednej linii, którą trzeba ułożyć, aby wygrać ( np.plansza 5x5, wygrywasz po ułożeniu 4 znaków w linii). Problem pojawia się przy sprawdzaniu, czy nastąpiła wygrana. Z założenia, funkcja ma sprawdzać, czy ilość takich samych znaków w pionie, poziomie, przekątnej \ i przekątnej / jest równa liczbie znaków wygrywających ( tu: zmienna ile). Niestety, przy pomocniczym wypisywaniu wartości zmiennych

poziom, pion,przek i przek_2   

każda z tych zmiennych wynosi 0, nawet jeśli liczba wstawionych kółek czy krzyżyków jest większa niż liczba wygrywających.

Funkcja sprawdzająca wygraną:

bool wygrana(){
 bool w_linii = false;
    char znak = this->kto;
    int poziom = 0, pion = 0, przek = 0, przek_2 = 0;

for( int i = 0; i < rozmiar; ++i )
    {
        for(int j=0;j>rozmiar;++j){
        if(tablica[i][j]!=' '){

        if( tablica[i][j]==tablica[i][j+1]) poziom++;

        else if( tablica[i][j]==tablica[i+1][j]) ++pion;

        else if( tablica[i][j]==tablica[i+1][j+1]) ++przek;

        else if( tablica[i][ rozmiar-1-i]==tablica[i+1][rozmiar-1-(i+1)]) ++przek_2;
        }
}
}
 if(( poziom==ile ) ||( pion==ile ) ||( przek == ile ) ||( przek_2 == ile ) )
    {
        w_linii = true;
    }
    return w_linii;
    
}

Po przeczytaniu tematów na forum próbowałem również sprawdzać tylko w tej linii i kolumnie, do której wstawiono znak, jednak efekt jest taki sam. ( w - wiersz, k - kolumna )

 if(tablica[i][j]!=' ')
    {
    if(tablica[this->w][i]==znak) ++poziom;
    if(tablica[i][this->k]==znak) ++pion;
    if(tablica[i][i]==znak) ++przek;
    if(tablica[i][rozmiar-1-i]==znak) ++przek_2;
    }

Z góry dziękuję za pomoc.

1

Sróbuj zmienić znak nierówności z j>rozmiar na j<rozmiar.

0

Przeoczenie, dzięki za zwrócenie uwagi , ale nie tutaj tkwi problem.

0

Twoje sprawdzanie jest bardzo dziwne, np. zmienną poziom inkrementujesz jeśli w dwóch sąsiednich polach w jakimkolwiek wierszu jest to samo. Dla klasycznej gry wykryjesz "poziomą" wygraną krzyżyka w takiej (niemożliwej skądinąd) sytuacji:

x x 0
0 x x
0 x x

Wygraną w poziomie można sprawdzić tak:

for(int i=0;i<rozmiar;i++)
{
    for(int j=0;j<=rozmiar-ile;j++)
    {
        poziom = 1;
        if(tablica[i][j] != ' ')
        {
            for(int k=1;k<ile;k++)
            {
                if(tablica[i][j] == tablica[i][j+k])
                {
                    poziom++;
                }
            }
            if(poziom == ile)
            {
               if(tablica[i][j] == 'x')
                  //return wygrał krzyżyk
               else
                  //return wygrało kółko
            }
        }
    }
}

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