-
Notifications
You must be signed in to change notification settings - Fork 0
/
TicTacToe.java
124 lines (101 loc) · 3.88 KB
/
TicTacToe.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import java.util.*;
public class TicTacToe {
static ArrayList<Integer> playerPostion = new ArrayList<Integer>();
static ArrayList<Integer> cpuPostion = new ArrayList<Integer>();
static boolean endGame;
public static void main(String[] args) {
char[][] gameBoard = {{' ', '|', ' ', '|', ' '},
{'-', '+', '-', '+', '-'},
{' ', '|', ' ', '|', ' '},
{'-', '+', '-', '+', '-'},
{' ', '|', ' ', '|', ' '}};
printGameBoard(gameBoard);
while(true) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter your placement (1-9):");
int pos = scan.nextInt();
while(playerPostion.contains(pos) || cpuPostion.contains(pos)){
System.out.println("Position Taken. Please try again.");
pos = scan.nextInt();
}
placePiece(gameBoard, pos, "player");
String winner = checkWinner();
System.out.println(winner);
if(endGame){
break;
}
Random rand = new Random();
int cpuPos = rand.nextInt(9) + 1;
while(playerPostion.contains(cpuPos) || cpuPostion.contains(cpuPos)){
cpuPos = rand.nextInt(9) + 1;
}
placePiece(gameBoard, cpuPos, "computer");
printGameBoard(gameBoard);
winner = checkWinner();
System.out.println(winner);
if(endGame){
break;
}
}
}
public static void printGameBoard(char[][] gameBoard){
for(char[] row: gameBoard){
for(char place: row){
System.out.print (place);
}
System.out.println();
}
}
public static void placePiece(char[][] gameBoard, int pos, String user){
char symbol = 'X';
if(user.equals("computer")){
symbol = 'O';
cpuPostion.add(pos);
} else if (user.equals("player")) {
playerPostion.add(pos);
}
switch (pos) {
case 1 -> gameBoard[0][0] = symbol;
case 2 -> gameBoard[0][2] = symbol;
case 3 -> gameBoard[0][4] = symbol;
case 4 -> gameBoard[2][0] = symbol;
case 5 -> gameBoard[2][2] = symbol;
case 6 -> gameBoard[2][4] = symbol;
case 7 -> gameBoard[4][0] = symbol;
case 8 -> gameBoard[4][2] = symbol;
case 9 -> gameBoard[4][4] = symbol;
}
}
public static String checkWinner(){
List<Integer> topRow = Arrays.asList(1, 2, 3);
List<Integer> midRow = Arrays.asList(4, 5, 6);
List<Integer> botRow = Arrays.asList(7, 8, 9);
List<Integer> cross1 = Arrays.asList(1, 5, 9);
List<Integer> cross2 = Arrays.asList(3, 5, 7);
List<Integer> topCol = Arrays.asList(1, 4, 7);
List<Integer> midCol = Arrays.asList(2, 5, 8);
List<Integer> botCol = Arrays.asList(3, 6, 9);
List<List<Integer>> winningConditions = new ArrayList<>();
winningConditions.add(topRow);
winningConditions.add(midRow);
winningConditions.add(botRow);
winningConditions.add(cross1);
winningConditions.add(cross2);
winningConditions.add(topCol);
winningConditions.add(midCol);
winningConditions.add(botCol);
for(List<Integer> l: winningConditions){
if(playerPostion.containsAll(l)){
endGame = true;
return "Congrats. You won!";
}else if(cpuPostion.containsAll(l)){
endGame = true;
return "Sorry. You lost.";
} else if (playerPostion.size() + cpuPostion.size() >= 9){
endGame = true;
return "Tied.";
}
}
return "";
}
}