В игре CONNECT 3 неправильно объявляется ничья, если на заключительном этапе есть победитель. Работая совершенно иначе - PullRequest
0 голосов
/ 13 апреля 2020

Как часть обучения Java в Android Studio, я практиковался в написании кода для игры CONNECT 3. Программа работает отлично, если нет выигрыша с последним счетчиком . Вместо того, чтобы объявить победителя, он показывает свою ничью. Из этого несоответствия есть только одно исключение. Только когда выигрышная комбинация равна {2,4,6}, игра правильно объявляет победителя. Для любой другой комбинации (когда счетчика больше не осталось), она объявляет игру как ничью.

{2,4,6} - это последняя из позиций, объявленных в массиве winnerPositions.

int[][]winningPositions = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};

Если я изменяю последовательность выигрышных комбинаций, комбинация, установленная в конце, работает.

Код для определения выигрышных позиций и, следовательно, победителя или розыгрыша выглядит следующим образом:

               for (int[] winningPosition : winningPositions) {
                if (gameState[winningPosition[0]] == gameState[winningPosition[1]] && gameState[winningPosition[0]] == gameState[winningPosition[2]] && gameState[winningPosition[0]] != 2) {

                    //someone has won

                    gameActive = false;

                    String winner = "";


                        if (activePlayer == 1) {
                            winner = player1;
                        } else {
                            winner = player2;

                        }



                    Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
                    TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);

                    winnerTextView.setText(winner + " has won!!!");

                    playAgainButton.setVisibility(View.VISIBLE);
                    winnerTextView.setVisibility(View.VISIBLE);


               } else {

                   boolean gameIsOver = true;

                    for (int counterState : gameState) {
                        if (counterState == 2) {
                            gameIsOver = false;
                        }
                    }

                    if (gameIsOver) {
                        TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);

                        winnerTextView.setText("IT'S A DRAW");

                        Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
                        playAgainButton.setVisibility(View.VISIBLE);
                        winnerTextView.setVisibility(View.VISIBLE);

                    }

                }
           }

Я считаю, что с утверждением If Else есть некоторые проблемы. Как я могу настроить код, чтобы он работал при всех возможностях?

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