Created
March 5, 2020 08:53
-
-
Save boogie666/a8aba3aabbc94e21882ff0aec14761b1 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.Scanner; | |
public class TicTacToe { | |
public static void main(String[] args) { | |
Scanner s = new Scanner(System.in); | |
char player = '0'; | |
char[][] board = emptyBoard(); | |
displayWelcome(board); | |
while (!gameOver(board, player)) { | |
player = nextPlayer(player); | |
takeTurn(s, board, player); | |
displayBoard(board); | |
} | |
displayEndGame(board, player); | |
s.close(); | |
} | |
public static char[][] emptyBoard() { | |
char[][] board = new char[3][3]; | |
for (int i = 0; i < board.length; i++) { | |
for (int j = 0; j < board[i].length; j++) { | |
board[i][j] = '_'; | |
} | |
} | |
return board; | |
} | |
public static boolean winByDiagonal(char[][] board, char player) { | |
boolean primaryDiagonal = board[0][0] == player && board[1][1] == player && board[2][2] == player; | |
boolean secondaryDiagonal = board[0][2] == player && board[1][1] == player && board[2][0] == player; | |
return primaryDiagonal || secondaryDiagonal; | |
} | |
public static boolean winByDiag(char[][] board, char player) { | |
boolean win = true; | |
for (int j = board.length - 1; j >= 0; j--) { | |
int i = board.length - j - 1; | |
win = win && board[i][j] == player; | |
} | |
return win; | |
} | |
public static boolean winByLine(char[][] board, char player) { | |
boolean line1 = board[0][0] == player && board[0][1] == player && board[0][2] == player; | |
boolean line2 = board[1][0] == player && board[1][1] == player && board[1][2] == player; | |
boolean line3 = board[2][0] == player && board[2][1] == player && board[2][2] == player; | |
return line1 || line2 || line3; | |
} | |
public static boolean winByColumn(char[][] board, char player) { | |
boolean column1 = board[0][0] == player && board[1][0] == player && board[2][0] == player; | |
boolean column2 = board[0][1] == player && board[1][1] == player && board[2][1] == player; | |
boolean column3 = board[0][2] == player && board[1][2] == player && board[2][2] == player; | |
return column1 || column2 || column3; | |
} | |
public static boolean draw(char[][] board) { | |
for (int i = 0; i < board.length; i++) { | |
for (int j = 0; j < board[i].length; j++) { | |
if (board[i][j] == '_') { | |
return false; | |
} | |
} | |
} | |
return true; | |
} | |
public static boolean gameOver(char[][] board, char player) { | |
return winByDiagonal(board, player) || winByLine(board, player) || winByColumn(board, player) || draw(board); | |
} | |
public static char nextPlayer(char currentPlayer) { | |
if (currentPlayer == 'x') { | |
return '0'; | |
} else { | |
return 'x'; | |
} | |
} | |
public static void takeTurn(Scanner s, char[][] board, char player) { | |
if (player == 'x') { | |
humanTurn(s, board, player); | |
} else { | |
aiTurn(board, player); | |
} | |
} | |
public static int readNum(Scanner sc) { | |
if (!sc.hasNextInt()) { | |
System.out.println("Introduceti un numar intre 0 si 2"); | |
return readNum(sc); | |
} | |
int number = sc.nextInt(); | |
if (number < 0 || number > 2) { | |
System.out.println("Introduceti un numar intre 0 si 2"); | |
return readNum(sc); | |
} | |
return number; | |
} | |
public static void humanTurn(Scanner s, char[][] board, char player) { | |
System.out.println("Randul lui " + player); | |
System.out.print("i: "); | |
int i = readNum(s); | |
System.out.println(); | |
System.out.print("j: "); | |
int j = readNum(s); | |
if (board[i][j] == '_') { | |
board[i][j] = player; | |
} else { | |
System.out.println("Pozitie ocupata deja, mai incearca"); | |
humanTurn(s, board, player); | |
} | |
} | |
public static int randomPosition() { | |
double procent = Math.random(); | |
if(procent < 1.0 / 3.0) { | |
return 0; | |
} | |
if(procent < 2.0/3.0) { | |
return 1; | |
} | |
return 2; | |
} | |
public static void aiTurn(char[][] board, char player) { | |
int i = randomPosition(); | |
int j = randomPosition(); | |
if (board[i][j] == '_') { | |
board[i][j] = player; | |
} else { | |
aiTurn(board, player); | |
} | |
} | |
public static void displayBoard(char[][] board) { | |
for (int i = 0; i < board.length; i++) { | |
for (int j = 0; j < board[i].length; j++) { | |
System.out.print(board[i][j] + " "); | |
} | |
System.out.println(); | |
} | |
} | |
public static void displayEndGame(char[][] board, char player) { | |
displayBoard(board); | |
if (draw(board)) { | |
System.out.println("Ramiza pe tura lui " + player); | |
} else { | |
System.out.println("Felicitari " + player + ", ai castigat!"); | |
} | |
} | |
public static void displayWelcome(char[][] board) { | |
System.out.println("Bun venit la X si Zero"); | |
displayBoard(board); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment