start of new file
[IRC.git] / Robust / src / Benchmarks / TTT / Board.java
1 public class Board {
2         // TicTacToe Board flags
3         flag init;
4         
5         int[][] board;
6         
7         int winningplayer;
8         
9         public Board()  {
10                 winningplayer = -1;
11                 board = new int[3][3];
12                 for (int i = 0; i < 3; i++)
13                         for (int j = 0; j < 3; j++)
14                                 board[i][j] = 0;
15         }
16         
17         public int makeMove(int row, int col) {
18                 if (boardFull() == 1) {
19                         winningplayer = 0;
20                         return 2;
21                 }
22                 if (board[row][col] != 0) { // Space taken
23                         return -1;
24                 }
25                 else {
26                         board[row][col] = 1;
27                         if (checkForWin(1) == 1) { // Check if player won
28                                 winningplayer = 1;
29                                 return 2;
30                         }
31                         // Computer makes move
32                         if (computerMakeMove() == 1) { // If made move successful
33                                 if (checkForWin(2) == 1) { // Check if computer won
34                                         winningplayer = 2;
35                                         return 2;
36                                 }
37                         }
38                         else { // Board full, no winner
39                                 winningplayer = 0;
40                                 return 2;
41                         }
42                 }
43                 return 1;
44         }
45
46         public int boardFull() {
47                 for (int i = 0; i < 3; i++)
48                         for (int j = 0; j < 3; j++)
49                                 if (board[i][j] == 0)
50                                         return 0;
51                 return 1;
52         }
53         
54         public int computerMakeMove() {
55                 for (int i = 0; i < 3; i++)
56                         for (int j = 0; j < 3; j++)
57                                 if (board[i][j] == 0) {
58                                         board[i][j] = 2;
59                                         return 1;
60                                 }
61                 return 0;       
62         }
63         
64         public int checkForWin(int p) {
65                 // Add logic for checking if player p wins
66                 // Horiz
67
68                 if ((board[0][0] == p) && (board[0][1] == p) && (board[0][2] == p) ||
69                         (board[1][0] == p) && (board[1][1] == p) && (board[1][2] == p) ||
70                         (board[2][0] == p) && (board[2][1] == p) && (board[2][2] == p)) {
71                                 return 1;
72                 }
73                 
74                 // Vert
75                 if ((board[0][0] == p) && (board[1][0] == p) && (board[2][0] == p) ||
76                         (board[0][1] == p) && (board[1][1] == p) && (board[2][1] == p) ||
77                         (board[0][2] == p) && (board[1][2] == p) && (board[2][2] == p)) {
78                                 return 1;
79                 }
80                 
81                 //Diag
82                 if ((board[0][0] == p) && (board[1][1] == p) && (board[2][2] == p) ||
83                         (board[0][2] == p) && (board[1][1] == p) && (board[2][0] == p)) {
84                         return 1;
85                 }
86                                 
87                 return 0;
88         }
89         
90         public int winner() {
91                 return winningplayer;
92         }
93 }