I have a logic issue in my tictactoe app. When I choose 2 in a row and computer randomly choses the 3 squere in the same row it finishes the game

Viewed 26

I'm in a process of making the TicTacToe app in Android Studio using java, and this is my first try at this. So the failure is the winning section, and I cannot find the error myself. When I choose 2 in a row and the computer randomly chooses the 3 square in the same row it finishes the game and the winner is the computer.

public class PlayGame extends AppCompatActivity {

int activePlayer = 0;
int[] gameState = {2, 2, 2, 2, 2, 2, 2, 2, 2};
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}};
boolean gameActive = true;
ArrayList<String> emptySquares = new ArrayList<>();
public void computer(){

    if (gameActive) {

        int select = emptySquares.size();
        int selected = new Random().nextInt(select);
        String selectedSquare = emptySquares.get(selected);
        switch (selectedSquare) {
            case "0":
                ImageView imageView1 = findViewById(R.id.imageView1);
                imageView1.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;

            case "1":
                ImageView imageView2 = findViewById(R.id.imageView2);
                imageView2.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;

            case "2":
                ImageView imageView3 = findViewById(R.id.imageView3);
                imageView3.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;

            case "3":
                ImageView imageView4 = findViewById(R.id.imageView4);
                imageView4.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;

            case "4":
                ImageView imageView5 = findViewById(R.id.imageView5);
                imageView5.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;

            case "5":
                ImageView imageView6 = findViewById(R.id.imageView6);
                imageView6.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;

            case "6":
                ImageView imageView7 = findViewById(R.id.imageView7);
                imageView7.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;

            case "7":
                ImageView imageView8 = findViewById(R.id.imageView8);
                imageView8.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;

            case "8":
                ImageView imageView9 = findViewById(R.id.imageView9);
                imageView9.setImageResource(R.drawable.x);
                activePlayer = 0;
                emptySquares.remove(selectedSquare);
                gameState[Integer.parseInt(selectedSquare)] = activePlayer;
                break;
        }

        check();
    }
}

public void dropIn(View view){

    ImageView counter = (ImageView) view;

    int tappedCounter = Integer.parseInt(counter.getTag().toString());

    if (gameState[tappedCounter] == 2 && gameActive && emptySquares.contains(Integer.toString(tappedCounter))){

        gameState[tappedCounter] = activePlayer;

        counter.setTranslationY(-1500);

        if (activePlayer == 0){

            counter.setImageResource(R.drawable.o);

            activePlayer = 1;

            emptySquares.remove(Integer.toString(tappedCounter));

            counter.animate().translationYBy(1).rotation(1).setDuration(300);

            check();

            computer();
        }

    }

}

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

            gameActive = false;

            String winner = "";

            if (activePlayer == 1){
                winner = "O";
            }
            else {
                winner = "X";
            }


            TextView winnerTextView = findViewById(R.id.textView);

            winnerTextView.setText("Winner : "+ winner);

            winnerTextView.setVisibility(View.VISIBLE);
        }
        else {

        }
    }
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_play_game);

    emptySquares.add("0");
    emptySquares.add("1");
    emptySquares.add("2");
    emptySquares.add("3");
    emptySquares.add("4");
    emptySquares.add("5");
    emptySquares.add("6");
    emptySquares.add("7");
    emptySquares.add("8");
}}
0 Answers
Related