import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int mode;
int xo;
char chXO;
Scanner in = new Scanner(System.in);
System.out.println("Выберете режим игры: 1 - PvP, 2 - PvC");
mode = in.nextInt();
while (true) {
if (mode == 1) {
mPvP();
break;
}
else if (mode == 2) {
System.out.println("Выберете за что играть: 1 - X, 2 - 0");
xo = in.nextInt();
if (xo == 1)
chXO = 'x';
else
chXO = '0';
mPvC(chXO);
break;
}
else {
System.out.println("Ведите 1 или 2");
System.out.println("Выберете стиль игры: 1 - PvP, 2 - PvC");
mode = in.nextInt();
}
}
}
//Игра с игроком
public static void mPvP() {
char[][] B = new char[3][3];
int x;
int y;
char testXO;
Scanner in = new Scanner(System.in);
System.out.print("Игровое поле:");
for (int i = 0; i < B.length; i++) {
System.out.println();
for (int j = 0; j < B[i].length; j++) {
B[i][j] = '-';
System.out.print(B[i][j] + " ");
}
}
System.out.println();
for (int t = 1; t < 10; t++) {
//Тест очереди игрока
if (t % 2 != 0)
testXO = 'x';
else
testXO = '0';
//Выбор игроком координат и запись в клетку
while (true) {
System.out.println("(Игрок " + testXO + ")Введите координаты клетки(x, y последовательно)(нумирация начинается с 1 с верхнего левого угла):");
x = in.nextInt();
y = in.nextInt();
if (x > 3 || y > 3 || x < 1 || y < 1)
System.out.println("x и y могут принимать значения 1, 2, 3");
else if (B[y - 1][x - 1] != '-')
System.out.println("Клетка с координатами " + x + ", " + y + " занята");
else {
B[y - 1][x - 1] = testXO;
break;
}
}
//Вывод изменённого игрового поля
for (int i = 0; i < B.length; i++) {
System.out.println();
for (int j = 0; j < B[i].length; j++) {
System.out.print(B[i][j] + " ");
}
}
System.out.println();
//Проверка 3-х одинаковых значений
// - - -
if (B[0][0] == testXO && B[0][0] == B[0][1] && B[0][0] == B[0][2]) {
System.out.println("Игра закончена, победил игрок " + testXO +"!");
break;
}else if (B[1][0] == testXO && B[1][0] == B[1][1] && B[1][0] == B[1][2]) {
System.out.println("Игра закончена, победил игрок " + testXO +"!");
break;
}else if (B[2][0] == testXO && B[2][0] == B[2][1] && B[2][0] == B[2][2]) {
System.out.println("Игра закончена, победил игрок " + testXO +"!");
break;
// | | |
}else if (B[0][0] == testXO && B[0][0] == B[1][0] && B[0][0] == B[2][0]) {
System.out.println("Игра закончена, победил игрок " + testXO +"!");
break;
}else if (B[0][1] == testXO && B[0][1] == B[1][1] && B[0][1] == B[2][1]) {
System.out.println("Игра закончена, победил игрок " + testXO + "!");
break;
}else if (B[0][2] == testXO && B[0][2] == B[1][2] && B[0][2] == B[2][2]) {
System.out.println("Игра закончена, победил игрок " + testXO + "!");
break;
// \ /
}else if (B[0][0] == testXO && B[0][0] == B[1][1] && B[0][0] == B[2][2]) {
System.out.println("Игра закончена, победил игрок " + testXO + "!");
break;
}else if (B[2][0] == testXO && B[2][0] == B[1][1] && B[2][0] == B[0][2]) {
System.out.println("Игра закончена, победил игрок " + testXO + "!");
break;
// ничья
}else if (t == 9)
System.out.println("Игра закончена, НИЧЬЯ!");
}
}
//Игра с компьютером
public static void mPvC(char chXO) {
char[][] B = new char[3][3];
int x;
int y;
int cx;
int cy;
char testXO;
Scanner in = new Scanner(System.in);
Random random = new Random();
System.out.print("Игровое поле: ");
for (int i = 0; i < B.length; i++) {
System.out.println();
for (int j = 0; j < B[i].length; j++) {
B[i][j] = '-';
System.out.print(B[i][j] + " ");
}
}
System.out.println();
for (int t = 1; t < 10; t++) {
//Тест очереди
if (t % 2 != 0)
testXO = 'x';
else
testXO = '0';
//Проверка на человека
if (testXO == chXO) {
//Выбор игроком координат и запись в клетку
while (true) {
System.out.println("(Игрок " + testXO + ")Введите координаты клетки(x, y последовательно)(нумирация начинается с 1 с верхнего левого угла):");
x = in.nextInt();
y = in.nextInt();
if (x > 3 || y > 3 || x < 1 || y < 1)
System.out.println("x и y могут принимать значения 1, 2, 3");
else if (B[y - 1][x - 1] != '-')
System.out.println("Клетка с координатами " + x + ", " + y + " занята ");
else {
B[y - 1][x - 1] = testXO;
break;
}
}
}else {
//Выбор компьютером координат и запись в клетку
System.out.println("Ход компьютера:");
while (true) {
cx = random.nextInt(3);
cy = random.nextInt(3);
if (B[cy][cx] == '-')
break;
}
B[cy][cx] = testXO;
}
//Вывод изменённого игрового поля
for (int i = 0; i < B.length; i++) {
System.out.println();
for (int j = 0; j < B[i].length; j++) {
System.out.print(B[i][j] + " ");
}
}
System.out.println();
//Проверка 3-х одинаковых значений
// - - -
if (B[0][0] == testXO && B[0][0] == B[0][1] && B[0][0] == B[0][2]) {
System.out.println("Игра закончена, победил игрок " + testXO +"!");
break;
}else if (B[1][0] == testXO && B[1][0] == B[1][1] && B[1][0] == B[1][2]) {
System.out.println("Игра закончена, победил игрок " + testXO +"!");
break;
}else if (B[2][0] == testXO && B[2][0] == B[2][1] && B[2][0] == B[2][2]) {
System.out.println("Игра закончена, победил игрок " + testXO +"!");
break;
// | | |
}else if (B[0][0] == testXO && B[0][0] == B[1][0] && B[0][0] == B[2][0]) {
System.out.println("Игра закончена, победил игрок " + testXO +"!");
break;
}else if (B[0][1] == testXO && B[0][1] == B[1][1] && B[0][1] == B[2][1]) {
System.out.println("Игра закончена, победил игрок " + testXO + "!");
break;
}else if (B[0][2] == testXO && B[0][2] == B[1][2] && B[0][2] == B[2][2]) {
System.out.println("Игра закончена, победил игрок " + testXO + "!");
break;
// \ /
}else if (B[0][0] == testXO && B[0][0] == B[1][1] && B[0][0] == B[2][2]) {
System.out.println("Игра закончена, победил игрок " + testXO + "!");
break;
}else if (B[2][0] == testXO && B[2][0] == B[1][1] && B[2][0] == B[0][2]) {
System.out.println("Игра закончена, победил игрок " + testXO + "! ");
break;
// ничья
}else if (t == 9)
System.out.println("Игра закончена, НИЧЬЯ!");
}
}
}