N x N Tic Tac Toe Проверка за победа

през последните 2 дни се опитвах да направя игра N x N Tic Tac Toe и имам проблем, който не разбирах защо се случва този проблем и ще се радвам, ако някой може да ми помогне да разреша това проблем. проблемът е, когато проверявам за Horizontal Win, програмата ми проверява само първия ред и не проверява другите редове. Ето функцията, която използвах за проверка на хоризонталната печалба:

void HorizontalWin()
{
    for(int i=0; i<size; i++){
        for(int j=0; j<size; ++j){
            if(board[i-1][j-1]==board[i-1][j] && board[i][j]!='_')
                horizontal=1;
            else {
                horizontal=0;
                break;
            }
        }
        if (horizontal==1)
            break;
    }
}

размер: е размерът на мрежата и е взет от потребителя.


person Sohel    schedule 27.11.2019    source източник
comment
най-вероятно трябва да преместите хоризонтала=0 с един цикъл нагоре, в противен случай винаги презаписвате резултатите си!   -  person B. Go    schedule 28.11.2019
comment


Отговори (1)


За начало е лоша идея, когато дадена функция използва глобални променливи, въпреки че може да бъде дефинирана без достъп до глобалните променливи.

Въпреки това вашата функция може да бъде дефинирана по следния начин

void HorizontalWin()
{
    horizontal = 0;

    for ( int i = 0; !horizontal && i < size; i++ )
    {
        if ( board[i][0] != '_' )
        {
            int j = 1;
            while ( j < size && board[i][j] == board[i][0] ) j++;
            horizontal = j == size;
        }
    }
} 

Що се отнася до реализацията на вашата функция, тогава тя има недефинирано поведение, защото поне в този оператор if

if(board[i-1][j-1]==board[i-1][j] && board[i][j]!='_')

има опит за достъп до паметта извън масива, когато i или j са равни на 0.

person Vlad from Moscow    schedule 27.11.2019