arbertictactoe
unknown
java
5 years ago
6.4 kB
9
Indexable
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class TicTacToe
{
//stores player1 positions for use in checkWinner
static ArrayList<Integer> playerPositions = new ArrayList<Integer>();
//stores player2 positions
static ArrayList<Integer> player2Positions = new ArrayList<Integer>();
public static void main(String[] args) {
char[][] gameBoard = {{' ', '|', ' ', '|', ' '},
{'-', '+', '-', '+', '-'},
{' ', '|', ' ', '|', ' '},
{'-', '+', '-', '+', '-'},
{' ', '|', ' ', '|', ' '}};
printBoard(gameBoard);
int turn = 0; //turn increases
String currentPlayer = "player"; //currentPlayer switches when turn switches
int playerNum = 1; //playerNum switches between 1 and 2 based on turns
while (playerPositions.size() + player2Positions.size() <= 9)
{
if (turn == 9)
{
System.out.println("CAT!");
break;
}
if (turn % 2 == 0)
{
currentPlayer = "player";
playerNum = 1;
}
else
{
currentPlayer = "player2";
playerNum = 2;
}
Scanner scan = new Scanner(System.in);
System.out.println("Enter your placement player " + playerNum + " (1 - 9):");
int playerPos = scan.nextInt(); //player1 position
while (playerPositions.contains(playerPos) || player2Positions.contains(playerPos))
{
System.out.println("Position taken, enter a correct position (1 - 9):");
playerPos = scan.nextInt();
}
while (playerPos > 9 || playerPos < 1)
{
System.out.println("Enter number in range (1 - 9):");
playerPos = scan.nextInt();
}
if (turn % 2 == 0)
{
currentPlayer = "player";
playerNum = 1;
}
else
{
currentPlayer = "player2";
playerNum = 2;
}
placePiece(gameBoard, playerPos, currentPlayer);
printBoard(gameBoard); //printboard after player 1 has went
int result = checkWinner(); //checking the winner
if (result > 0)
{
System.out.println(stringWinner(result));
break;
}
turn++;
}
}
public static void printBoard(char[][] gameBoard) //prints the board
{
for (char[] row : gameBoard) {
for (char c : row) {
System.out.print(c);
}
System.out.println();
}
}
//places a piece
public static void placePiece(char[][] gameBoard, int pos, String user)
{
char symbol = ' ';
if (user.equals("player"))
{
symbol = 'X';
playerPositions.add(pos);
} else if (user.equals("player2"))
{
symbol = 'O';
player2Positions.add(pos);
}
switch (pos) { //switch case to place a piece according to symbol
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;
}
}
//checks winner
//@return: int result
public static int checkWinner()
{
int result = 0;
List topRow = Arrays.asList(1, 2, 3);
List midRow = Arrays.asList(4, 5, 6);
List botRow = Arrays.asList(7, 8, 9);
List leftCol = Arrays.asList(1, 4, 7);
List midCol = Arrays.asList(2, 5, 8);
List rightCol = Arrays.asList(3, 6, 9);
List cross1 = Arrays.asList(1, 5, 9);
List cross2 = Arrays.asList(3, 5, 7);
List<List> winning = new ArrayList<List>();
winning.add(topRow);
winning.add(midRow);
winning.add(botRow);
winning.add(leftCol);
winning.add(midCol);
winning.add(rightCol);
winning.add(cross1);
winning.add(cross2);
List draw = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<List> draw1 = new ArrayList<List>();
//goes through the lists in winning and checks
//if playerPositions or player2Positions contain all the numbers
//in the lists
//if both positions add up to 9 result = 3 (CAT)
for (List l : winning)
{
if (playerPositions.containsAll(l))
{
return 1;
}
if (player2Positions.containsAll(l))
{
return 2;
}
if (playerPositions.size() + player2Positions.size() > 9)
{
return 3;
}
}
return 0;
}
//converts int result into a String
public static String stringWinner(int result) //takes the int result to a string
{
String string = "";
if (result == 1)
{
string = "Congrats, Player 1 WON!";
}
else if (result == 2)
{
string = "Congrats, Player 2 WON!";
}
else if (result == 3)
{
string = "CAT!";
}
return string;
}
}
Editor is loading...