Changing CPU tic tac toe to 2 player in JAVA

Viewed 30

I am new to Java and followed a video on making a Tic Tac Toe game for a class project. I am unsure how to change the CPU element into a player section. So far this is what I have. I also need to create an AOP for the refereeing aspect.

Any input you all give would be greatly appreciated. I look forward to reading your input.

 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Random;
 import java.util.Scanner;

  public class  TicTacToe {

static ArrayList<Integer> player1Positions = new ArrayList<Integer>();
   static ArrayList<Integer> player2Positions = new ArrayList<Integer>();

    public static void main(String[] args) {
    
    char [] [] gameBoard = {{' ', '|', ' ', '|', ' '}, 
            {'-', '+', ' ', '+', '-'}, 
            {' ', '|', ' ', '|', ' '}, 
            {'-', '+', ' ', '+', '-'}, 
            {' ', '|', ' ', '|', ' '}};
    
    
    
         Scanner scan = new Scanner (System.in);
    
         printGameBoard(gameBoard);
         while(true) {
        Scanner scan1 = new Scanner (System.in);
        System.out.println("Enter your placement (1-9):");
        int playerPos = scan1.nextInt();
        
        
        
        placePiece(gameBoard, playerPos, "Player");
        
        Random rand = new Random();
        int player2Pos = rand.nextInt(9) + 1;
        while(player1Positions.contains(player2Pos) || 
        player2Positions.contains(player2Pos)){
            player2Pos = rand.nextInt(9) + 1;
        }
        
        placePiece(gameBoard, player2Pos, "Player2");
        
        
        printGameBoard(gameBoard);
        
        String result = checkWinner();
        System.out.println(result);
    
    }
}


public static void printGameBoard(char [] [] gameBoard) {
    for (char [] row : gameBoard) {
        for(char c : row) {
            System.out.print(c);
        }
        System.out.println();
    }
    }
public static void placePiece(char [] [] gameBoard, int pos, String user) {
    
    
    char symbol = ' ';
    
    
    if (user.equals("Player ")) {
        symbol = 'X';
        player1Positions.add(pos);
        } else if (user.equals("Player 2"))
        symbol = '0';
        player2Positions.add(pos);
    
    switch (pos) {
    case 1: 
        gameBoard[0] [0] = symbol;
        break;
    case 2: 
        gameBoard[0] [2] = symbol;
        break;
    case 3: 
        gameBoard[0] [4] = symbol;
        break;
    case 4: 
        gameBoard[2] [0] = symbol;
        break;
    case 5: 
        gameBoard[2] [2] = symbol;
        break;
    case 6: 
        gameBoard[2] [4] = symbol;
        break;
    case 7: 
        gameBoard[4] [0] = symbol;
        break;
    case 8: 
        gameBoard[4] [2] = symbol;
        break;
    case 9: 
        gameBoard[4] [4] = symbol;
        break;
    default: 
        break;
  }
 }
  public static String checkWinner() {
    
    List topRow = Arrays.asList(1, 2, 3);
    List middleRow = Arrays.asList(4, 5, 6);
    List bottomRow = Arrays.asList(7, 8, 9);
    List leftColumn = Arrays.asList(1, 4, 7);
    List middleColumn = Arrays.asList(2, 5, 8);
    List rightColumn = Arrays.asList(3, 6, 9);
    List cross1 = Arrays.asList(1, 5, 9);
    List cross2 = Arrays.asList(7, 5, 3);
    
    
    List<List>winning = new ArrayList<List>();
    winning.add(topRow);
    winning.add(middleRow);
    winning.add(bottomRow);
    winning.add(leftColumn);
    winning.add(middleColumn);
    winning.add(rightColumn);
    winning.add(cross1);
    winning.add(cross2);
    
    
    for(List l : winning) {
        if(player1Positions.containsAll(l)) {
            return "Congratulations you win!";
        } else if(player2Positions.containsAll(l)) {
            return "Player2 wins!";
        } else if(player1Positions.size() + player2Positions.size() == 9) {
            return "Draw!";
        }
    }
    
    return "";
   }
   }
0 Answers
Related