Java - игра Connect Four не будет составлять разные счетчики выше трех - PullRequest
0 голосов
/ 24 апреля 2019

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

enter image description here

Это озадачивает меня, потому что это, кажется, происходит только тогда, когда в одном столбце используются разные счетчики. На изображении ниже вы можете видеть, что он работает нормально, когда установлены четыре счетчика одного типа.

enter image description here

Кто-нибудь возражал бы посмотреть на мой код, чтобы помочь выявить проблему?

private void placeCounter(char player, int position){
    boolean placed = false;


    if(player == 'r'){
        for( int i=board.length-1; i>=0; i--){
            if(!placed){
                if(board[i][position] == 'y'){
                    board[i-1][position] = 'r';
                    placed = true;
                }

                else if(board[i][position] != 'r'){
                    board[i][position] = 'r';
                    placed = true;
                }
            }
        }
    }
    else {
        for( int i=board.length-1; i>=0; i--){
            if(!placed){
                if(board[i][position] == 'r'){
                    board[i-1][position] = 'y';
                    placed = true;
                }

                else if(board[i][position] != 'y'){
                    board[i][position] = 'y';
                    placed = true;
                }
            }
        }
    }
}

1 Ответ

1 голос
/ 24 апреля 2019

Ваш метод placeCounter должен выглядеть примерно так:

private void placeCounter(char player, int position) {
        boolean placed = false;

        if (player == 'r') {
            for (int i = board.length - 1; i >= 0; i--) {
                if (!placed && board[i - 1][position] != 'r' && board[i - 1][position] != 'y') {
                    if (board[i][position] == 'y') {
                        board[i - 1][position] = 'r';
                        placed = true;
                    }

                    else if (board[i][position] != 'r') {
                        board[i][position] = 'r';
                        placed = true;
                    }
                }
            }
        } else {
            for (int i = board.length - 1; i >= 0; i--) {
                if (!placed && board[i - 1][position] != 'y' && board[i - 1][position] != 'r') {
                    if (board[i][position] == 'r') {
                        board[i - 1][position] = 'y';
                        placed = true;
                    }

                    else if (board[i][position] != 'y') {
                        board[i][position] = 'y';
                        placed = true;
                    }
                }
            }
        }
    }

Когда вы пытаетесь разместить счетчик, вы должны проверить, занята ли ячейка r или y.Если вы заметили, что я добавил эти условия в if(!placed) инструкцию:

&& board[i - 1][position] != 'y' && board[i - 1][position] != 'r'

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

Вы также должны проверить, является ли пользовательский ввод r или y, потому что, если я вставлю пробел или число в качестве ввода, программа выдаст исключение.

Этогрубое решение, вы могли бы прийти с чем-то лучшим, но это просто чтобы направить вас в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...