-
Notifications
You must be signed in to change notification settings - Fork 0
/
Main.java
289 lines (275 loc) · 6.83 KB
/
Main.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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
//This program makes use of methods for a Tic-tac-toe game. If x get a row or column, x wins. If o get a row or column,
//o wins. If x's and o's the same, its a draw.
//import scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//declare scanner
Scanner scanner = new Scanner(System.in);
//create the board
char[][]board = createBoard();
//set token to 'x'
char token = 'x';
//set k=1
int k=1;
//set boolean won=false
boolean won = false;
//set boolean avail=true
boolean avail=true;
//prints the initial board
startBoard(board);
//loop at most 9 times, but end loop when someone wins
//do the code
do {
//if k is greater than 1
if(k>1) {
//if avail
if(avail) {
//calls method to print the board again
newBoard(board);
}
//change token(if it was 'x' change to 'o' and vice versa
if(token=='x') {
token='o';
}
else {
token='x';
}
}
//Ask player where to place token each time
System.out.println("Where to place "+token);
//int place is for the placeToken method
int place = scanner.nextInt();
//if place is between 1 and 9
if(place>0 && place<=9) {
//calls method for availability
avail=availability(board,place);
//calls method for placeToken
if(avail) {
board=placeToken(board, token, place);
}
//else
else {
//that place is already taken, try another one
System.out.println("That place is already taken, try again!");
//k is being decremented
k--;
}
}
//else
else {
//ask user to try again
System.out.println("Please enter a number between 1-9 again!");
}
//if k is greater than 4
if(k>4) {
//calls method check for winner
won=checkforwinner(board);
//if won is true
if(won) {
//calls method to print the board again
newBoard(board);
//congratulate someone on winning
//if token x, o won
if(token=='o') {
System.out.println('o'+" won!");
}
//else x won
else {
System.out.println('x'+" won!");
}
}
}
//k is being incremented
k++;
//while k is less than 9 and won is false
}while(k<9 && won==false);
//if won is false
if(won==false) {
//calls method to print the board again
newBoard(board);
//it's a draw, no winner
System.out.println("It's a draw!");
}
}//end main
//methods
//method to create the board
public static char[][]createBoard() {
//17 by 17 tic tac toe game
char[][] board = new char[17][17];
//needs return
return board;
}
//method to print the first board
public static void startBoard(char[][] board) {
//declare rows
int row = 0;
//declare columns
int col = 0;
//inner and outer for loop to fill all rows with blanks from 0 to 16
//outer for loop
for(row=0; row<17; row++) {
//inner for loop
for(col = 0; col<17; col++) {
board[row][col]=' ';
}
}
//for every column puts line for the first horizontal loop
for(col = 0; col<17; col++) {
board[5][col]='-';
}
//for every column puts line for the second horizontal loop
for(col=0; col<17; col++) {
board[11][col]='-';
}
//needs new line for 17 by 17
System.out.println();
//for every row puts line for the first vertical loop
for(row = 0; row<17; row++) {
board[row][5]='|';
}
//for every row puts line for the second vertical loop
for(row=0; row<17; row++) {
board[row][11]='|';
}
//put in numbers for Tic-tac-toe, for player to visualize the board placements
board[2][2]='1';
board[2][8]='2';
board[2][14]='3';
board[8][2]='4';
board[8][8]='5';
board[8][14]='6';
board[14][2]='7';
board[14][8]='8';
board[14][14]='9';
//nested loop to print the board
for(row=0; row<17; row++) {
for(col = 0; col<17; col++)
System.out.print(board[row][col]);
System.out.println();
}
}
//method to check for winner
public static boolean checkforwinner(char[][] board){
//for loop, to go through the board placements
for(int i=2; i<14; i=i+6) {
//if statement to check if its a straight across win
if(board[i][2]==board[i][8]&&board[i][8]==board[i][14]) {
//its a winner because 3 in a row
return true;
}
}
//for loop, to go through the board placements
for(int j=2; j<14; j=j+6) {
//if statement to check if its straight down win
if(board[2][j]==board[8][j]&&board[8][j]==board[14][j]) {
//its a winner because 3 in a row
return true;
}
}
//code to check diagonally
if(board[2][2]==board[8][8]&&board[8][8]==board[14][14]) {
//its a winner because 3 in a row
return true;
}
//code to check diagonally
if(board[2][14]==board[8][8]&&board[8][8]==board[14][2]) {
//its a winner because 3 in a row
return true;
}
//needs return
return false;
}
//method to place token(x's and o's placement)
public static char[][] placeToken(char[][]board,char token,int place) {
//switch statement
switch(place) {
case 1:board[2][2]=token;
break;
case 2: board[2][8]=token;
break;
case 3: board[2][14]=token;
break;
case 4: board[8][2]=token;
break;
case 5: board[8][8]=token;
break;
case 6: board[8][14]=token;
break;
case 7: board[14][2]=token;
break;
case 8: board[14][8]=token;
break;
case 9: board[14][14]=token;
break;
}
//return
return board;
}
//method to print out new board
public static void newBoard(char[][] board) {
//declare rows
int row = 0;
//declare columns
int col = 0;
//nested loop to print the board
for(row=0; row<17; row++) {
for(col = 0; col<17; col++)
System.out.print(board[row][col]);
System.out.println();
}
}
//method to check availability of board(Extra Credit portion)
public static boolean availability(char[][] board, int place) {
//switch statement,if board is the number return true.
switch(place) {
case 1:
if(board[2][2]=='1') {
return true;
}
break;
case 2:
if(board[2][8]=='2') {
return true;
}
break;
case 3:
if(board[2][14]=='3') {
return true;
}
break;
case 4:
if(board[8][2]=='4') {
return true;
}
break;
case 5:
if(board[8][8]=='5') {
return true;
}
break;
case 6:
if(board[8][14]=='6') {
return true;
}
break;
case 7:
if(board[14][2]=='7') {
return true;
}
break;
case 8:
if(board[14][8]=='8') {
return true;
}
break;
case 9:
if(board[14][14]=='9') {
return true;
}
break;
}
//return
return false;
}
}//end class