-
Notifications
You must be signed in to change notification settings - Fork 0
/
Game.java
73 lines (64 loc) · 2.25 KB
/
Game.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
import java.util.*;
/* =======================================
* Author: Peter Hafner and Sebastian M-G
* Date: 10 February 2024
* Purpose: Handles running the game
* =======================================
*/
public class Game {
/* Game variables */
public static final String border = "\n=================================================\n";
public static Scanner scan = new Scanner(System.in);
public static Board board = new Board();
private Player player1, player2;
/* Runs the game until its over */
public void run() {
/* Initialize players */
if (requestPlayerType() == 2) {
player1 = new Computer();
player2 = new Computer();
} else {
if (Math.random()<0.5) {
player1 = new Computer();
player2 = new Person();
} else {
player1 = new Person();
player2 = new Computer();
}
}
/* Game loop */
int turn = 0;
while (!board.getIsWon() && turn < 9) {
if (turn % 2 == 0) player1.runTurn();
else player2.runTurn();
board.evaluate();
turn++;
}
/* End game */
System.out.println(border);
board.printBoard();
if (board.getIsWon()) System.out.println("Player " +((turn-1)%2+1) + " wins!");
else System.out.println("It's a draw!");
System.out.print(border);
}
/* Take and sanitize player type info */
public int requestPlayerType() {
int playerType = 0;
boolean invalidInput = true;
while (invalidInput) {
System.out.println(border);
System.out.println("Select the AIs opponent:");
System.out.print("[1] Human\n[2] AI\n--> ");
try {
playerType = scan.nextInt();
if (playerType == 1 || playerType == 2) invalidInput = false;
else System.out.print("Invalid input; enter 1 for Human or 2 for AI: ");
}
catch(InputMismatchException e) {
System.out.print("Invalid input; enter 1 for Human or 2 for AI: ");
scan.next();
}
}
return playerType;
}
}