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 "";
}
}