Диагональная проверка победителя, крестики-нолики - PullRequest
0 голосов
/ 09 октября 2018

У меня есть этот метод для проверки победителя в крестики-нолики

public boolean hasWinner(Cell shape, int row, int col) {
    int count = 0;
    for(int i=0;i<WIDTH;i++){
        if(this.board[row][i]==shape){
            count++;
        }
        else{
            count=0;
        }
        if(count>=5){
            return true;
        }
    }
    count=0;
    for(int i=0;i<HEIGHT;i++){
        if(this.board[i][col]==shape){
            count++;
        }
        else{
            count=0;
        }
        if(count>=5){
            return true;
        }
    }

Я уже написал код для проверки, если есть 5 одинаковых символов последовательно в строке и столбце последнего добавленного символа, и теперь яНеобходимо проверить обе диагонали, на которых находится последний добавленный символ.Есть какой-то трюк, или я должен написать что-то вроде board[row+1][col+1]==shape && board[row+2][col+2]==shape...?

1 Ответ

0 голосов
/ 09 октября 2018

Я не могу написать вам решение сейчас, но я думаю, что вы спрашиваете об этом цикле:

        Cell shape = null;
        boolean win = true;

        for(int j=0, k = 0; j < WIDTH) {
            if(shape == null) {
                shape = this.board[j][k];
            } else {
                win = win && this.board[j][k] == shape;
            }

        }

, который проходит через главную диагональ, поэтому вам не нужно писать вещи вручную.Тогда вам нужно сделать то же самое для второй диагонали

Но, если честно, если бы я был вами, у меня было бы 3 или менее строк / столбцов, я бы сделал так, как вы предлагали для целей читабельности

...