Created
July 24, 2015 04:27
-
-
Save bohnna/ab270c78193f70951192 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import java.util.*; | |
| /** | |
| * Write a description of class Board here. | |
| * | |
| * @author BUNZ | |
| * @version 1.BUNZ | |
| */ | |
| public class Board { | |
| char [ ] [ ] gameBoard; | |
| public Board( ) { | |
| gameBoard = new char[3][3]; | |
| for (int row = 0; row < 3; row++) { | |
| for (int col = 0; col < 3; col++) { | |
| gameBoard[row][col] = ' '; | |
| } | |
| } | |
| } | |
| public boolean checkForWin (char marker, char[ ][ ] board) { | |
| boolean isAWinner = false; | |
| int consecutive; | |
| int col; | |
| int row; | |
| consecutive = 0; | |
| for (row = 0; row < 3 && consecutive != 3; row++) { | |
| consecutive = 0; | |
| for (col = 0; col < 3; col ++) { | |
| if (board[row][col] == marker) { | |
| consecutive++; | |
| } | |
| } | |
| } | |
| if (consecutive == 3) { | |
| isAWinner = true; | |
| } | |
| if (!isAWinner) { | |
| if (board[1][1] == marker) { | |
| System.out.println("CENTER MARKER DETECTED"); | |
| consecutive = 0; | |
| for (row = 0; row < 3; row += 2) { | |
| if (board[row][0] == marker) { | |
| consecutive++; | |
| System.out.println("CORNER MARKER DETECTED"); | |
| if (row == 0 && board[2][2] == marker) { | |
| consecutive = 3; | |
| break; | |
| } else if (row == 2 && board[0][2] == marker) { | |
| consecutive = 3; | |
| break; | |
| } | |
| } | |
| } | |
| } else { | |
| for (col = 0; col < 3 && consecutive != 3; col++) { | |
| consecutive = 0; | |
| for (row = 0; row < 3; row ++) { | |
| if (board[row][col] == marker) { | |
| consecutive++; | |
| } | |
| } | |
| } | |
| } | |
| if (consecutive == 3) { | |
| isAWinner = true; | |
| } | |
| } | |
| return isAWinner; | |
| } | |
| public boolean checkForWin (char marker) { | |
| boolean isAWinner = false; | |
| int consecutive; | |
| int row; | |
| int col; | |
| consecutive = 0; | |
| for (row = 0; row < 3 && consecutive != 3; row++) { | |
| consecutive = 0; | |
| for (col = 0; col < 3; col++) { | |
| if (gameBoard[row][col] == marker) { | |
| consecutive++; | |
| } | |
| } | |
| } | |
| if (consecutive == 3) { | |
| isAWinner = true; | |
| } | |
| if (!isAWinner) { | |
| if (gameBoard[1][1] == marker) { | |
| for (row = 0; row < 3; row += 2) { | |
| if (gameBoard[row][0] == marker) { | |
| if (row == 0 && gameBoard[2][2] == marker) { | |
| isAWinner = true; | |
| break; | |
| } else if (row == 2 && gameBoard[0][2] == marker) { | |
| isAWinner = true; | |
| break; | |
| } | |
| } | |
| } | |
| if (!isAWinner) { | |
| for (col = 0; col < 3 && consecutive != 3; col++) { | |
| consecutive = 0; | |
| for (row = 0; row < 3; row ++) { | |
| if (gameBoard[row][col] == marker) { | |
| consecutive++; | |
| } | |
| } | |
| } | |
| if (consecutive == 3) { | |
| isAWinner = true; | |
| } | |
| } | |
| } | |
| } | |
| return isAWinner; | |
| } | |
| public void computerMove(char marker) { | |
| boolean canComputerWin = false; | |
| char[ ][ ] copyBoard; | |
| int row; | |
| int col; | |
| int tryRow; | |
| int tryCol; | |
| row = 0; | |
| col = 0; | |
| for (row = 0; row < 3 && !canComputerWin; row++) { | |
| for(col = 0; col < 3 && !canComputerWin; col++) { | |
| if (gameBoard[row][col] == ' ') { | |
| copyBoard = copyTheBoard( ); | |
| copyBoard[row][col] = marker; | |
| canComputerWin = checkForWin(marker, copyBoard); | |
| } | |
| } | |
| } | |
| if (canComputerWin) { | |
| gameBoard[row-1][col-1] = marker; | |
| } else { | |
| for (col = 0; col < 3 && !canComputerWin; col++) { | |
| for (row = 0; row < 3 && !canComputerWin; row++) { | |
| if (gameBoard[row][col] == ' ') { | |
| System.out.println("Checking " + row + "x" + col); | |
| copyBoard = copyTheBoard( ); | |
| copyBoard[row][col] = marker; | |
| canComputerWin = checkForWin(marker, copyBoard); | |
| } | |
| } | |
| } | |
| if (canComputerWin) { | |
| gameBoard[row-1][col-1] = marker; | |
| } else { | |
| boolean placed = false; | |
| Random rand = new Random(); | |
| do { | |
| tryRow = rand.nextInt(3); | |
| tryCol = rand.nextInt(3); | |
| System.out.println("Not placed, Trying " + tryRow + "x" + tryCol); | |
| if (gameBoard[tryRow][tryCol] == ' ') { | |
| gameBoard[tryRow][tryCol] = marker; | |
| placed = true; | |
| System.out.println("Placed"); | |
| } | |
| } while(!placed); | |
| } | |
| } | |
| } | |
| public boolean humanMoveOK(int row, int col) { | |
| return row <= 3 && col <= 3 && gameBoard[row-1][col-1] == ' '; | |
| } | |
| public void makeMove(int row, int col, char marker) { | |
| gameBoard[row-1][col-1] = marker; | |
| } | |
| private char[ ][ ] copyTheBoard( ) { | |
| char [ ][ ] temp = new char[3][3]; | |
| for (int row = 0; row < 3; row++) { | |
| for (int col = 0; col < 3; col++) { | |
| temp[row][col] = gameBoard[row][col]; | |
| } | |
| } | |
| return temp; | |
| } | |
| public boolean humanMove(int row, int col, char marker) { | |
| boolean placed; | |
| if (gameBoard[row-1][col-1] == ' ') { | |
| gameBoard[row-1][col-1] = marker; | |
| placed = true; | |
| } else { | |
| placed = false; | |
| } | |
| return placed; | |
| } | |
| public String toString( ) { | |
| String result = ""; | |
| int row; | |
| int col; | |
| result += " 1 2 3\n"; | |
| for(row = 0; row < 3; row++) { | |
| result += "\n" + (row+1); | |
| for (col = 0; col < 3; col++) { | |
| result += " " + gameBoard[row][col] + " "; | |
| } | |
| } | |
| return result; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment