Skip to content

Instantly share code, notes, and snippets.

@boogie666
Created March 5, 2020 08:53
Show Gist options
  • Save boogie666/a8aba3aabbc94e21882ff0aec14761b1 to your computer and use it in GitHub Desktop.
Save boogie666/a8aba3aabbc94e21882ff0aec14761b1 to your computer and use it in GitHub Desktop.
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