Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
175 changes: 112 additions & 63 deletions src/main/java/App.java
Original file line number Diff line number Diff line change
@@ -1,90 +1,139 @@
import java.util.Scanner;

public class App {
private char[] gameBoard = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
private boolean isGameRunning = true;
private boolean isBoardEmpty = false;
private int winner = 0;

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
byte input;
byte rand;
byte i;
boolean boxAvailable = false;
byte winner = 0;
char box[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
App app = new App();
app.startGame();
}

public void startGame() {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter box number to select. Enjoy!\n");

boolean boxEmpty = false;
while (true) {
System.out.println("\n\n " + box[0] + " | " + box[1] + " | " + box[2] + " ");
System.out.println("-----------");
System.out.println(" " + box[3] + " | " + box[4] + " | " + box[5] + " ");
System.out.println("-----------");
System.out.println(" " + box[6] + " | " + box[7] + " | " + box[8] + " \n");
if(!boxEmpty){
for(i = 0; i < 9; i++)
box[i] = ' ';
boxEmpty = true;
}
while (isGameRunning) {
printBoard();

if(winner == 1){
System.out.println("You won the game!\nCreated by Shreyas Saha. Thanks for playing!");
break;
} else if(winner == 2){
System.out.println("You lost the game!\nCreated by Shreyas Saha. Thanks for playing!");
break;
} else if(winner == 3){
System.out.println("It's a draw!\nCreated by Shreyas Saha. Thanks for playing!");
break;
if (!isBoardEmpty) {
clearBoard();
isBoardEmpty = true;
}

while (true) {
input = scan.nextByte();
if (input > 0 && input < 10) {
if (box[input - 1] == 'X' || box[input - 1] == 'O')
System.out.println("That one is already in use. Enter another.");
else {
box[input - 1] = 'X';
break;
}
}
else
System.out.println("Invalid input. Enter again.");
if (winner != 0) {
displayWinner(winner);
break;
}

if((box[0]=='X' && box[1]=='X' && box[2]=='X') || (box[3]=='X' && box[4]=='X' && box[5]=='X') || (box[6]=='X' && box[7]=='X' && box[8]=='X') ||
(box[0]=='X' && box[3]=='X' && box[6]=='X') || (box[1]=='X' && box[4]=='X' && box[7]=='X') || (box[2]=='X' && box[5]=='X' && box[8]=='X') ||
(box[0]=='X' && box[4]=='X' && box[8]=='X') || (box[2]=='X' && box[4]=='X' && box[6]=='X')){
winner = 1;
continue;
}
// Хід гравця
playerMove(scanner);

boxAvailable = false;
for(i=0; i<9; i++){
if(box[i] != 'X' && box[i] != 'O'){
boxAvailable = true;
break;
}
// Перевірка перемоги гравця
if (checkWinner('X')) {
winner = 1;
continue;
}

if(boxAvailable == false){
// Перевірка на нічию
if (!isBoardAvailable()) {
winner = 3;
continue;
}

while (true) {
rand = (byte) (Math.random() * (9 - 1 + 1) + 1);
if (box[rand - 1] != 'X' && box[rand - 1] != 'O') {
box[rand - 1] = 'O';
// Хід комп'ютера
makeComputerMove();

// Перевірка перемоги комп'ютера
if (checkWinner('O')) {
winner = 2;
}
}

scanner.close();
}

// Виведення ігрової дошки
private void printBoard() {
System.out.println("\n\n " + gameBoard[0] + " | " + gameBoard[1] + " | " + gameBoard[2] + " ");
System.out.println("-----------");
System.out.println(" " + gameBoard[3] + " | " + gameBoard[4] + " | " + gameBoard[5] + " ");
System.out.println("-----------");
System.out.println(" " + gameBoard[6] + " | " + gameBoard[7] + " | " + gameBoard[8] + " \n");
}

// Очищення дошки
private void clearBoard() {
for (int i = 0; i < 9; i++) {
gameBoard[i] = ' ';
}
}

// Хід гравця
private void playerMove(Scanner scanner) {
while (true) {
byte input = scanner.nextByte();
if (input > 0 && input < 10) {
if (gameBoard[input - 1] == 'X' || gameBoard[input - 1] == 'O') {
System.out.println("That one is already in use. Enter another.");
} else {
gameBoard[input - 1] = 'X';
break;
}
} else {
System.out.println("Invalid input. Enter again.");
}
}
}

if((box[0]=='O' && box[1]=='O' && box[2]=='O') || (box[3]=='O' && box[4]=='O' && box[5]=='O') || (box[6]=='O' && box[7]=='O' && box[8]=='O') ||
(box[0]=='O' && box[3]=='O' && box[6]=='O') || (box[1]=='O' && box[4]=='O' && box[7]=='O') || (box[2]=='O' && box[5]=='O' && box[8]=='O') ||
(box[0]=='O' && box[4]=='O' && box[8]=='O') || (box[2]=='O' && box[4]=='O' && box[6]=='O')){
winner = 2;
continue;
// Перевірка переможця
private boolean checkWinner(char player) {
return (gameBoard[0] == player && gameBoard[1] == player && gameBoard[2] == player) ||
(gameBoard[3] == player && gameBoard[4] == player && gameBoard[5] == player) ||
(gameBoard[6] == player && gameBoard[7] == player && gameBoard[8] == player) ||
(gameBoard[0] == player && gameBoard[3] == player && gameBoard[6] == player) ||
(gameBoard[1] == player && gameBoard[4] == player && gameBoard[7] == player) ||
(gameBoard[2] == player && gameBoard[5] == player && gameBoard[8] == player) ||
(gameBoard[0] == player && gameBoard[4] == player && gameBoard[8] == player) ||
(gameBoard[2] == player && gameBoard[4] == player && gameBoard[6] == player);
}

// Перевірка наявності вільних місць
private boolean isBoardAvailable() {
for (char cell : gameBoard) {
if (cell != 'X' && cell != 'O') {
return true;
}
}
return false;
}

// Хід комп'ютера
private void makeComputerMove() {
while (true) {
int rand = (int) (Math.random() * 9);
if (gameBoard[rand] != 'X' && gameBoard[rand] != 'O') {
gameBoard[rand] = 'O';
break;
}
}
}

// Виведення переможця
private void displayWinner(int winner) {
switch (winner) {
case 1:
System.out.println("You won the game! Thanks for playing!");
break;
case 2:
System.out.println("You lost the game! Thanks for playing!");
break;
case 3:
System.out.println("It's a draw! Thanks for playing!");
break;
}
}
}
}