Untitled
unknown
java
5 years ago
4.7 kB
15
Indexable
import java.util.Random;
import java.util.Scanner;
public class Main {
static char [] [] map;
static final int SIZE = 3;
static final char DOT_EMPTY = '.';
static final char DOT_X = 'X';
static final char DOT_0 = '0';
static final Random sc = new Random();
public static void main(String[] args) {
initMap();
printMap();
while (true) {
/*
Каждый ход (не важно кто ходил) может быть победным,
поэтому после каждого хода проверям победил ли ходящий или нет.
Если человек ходит первым, то при ничье его ход будет и последним,
поэтому проверям после его хода (точнее после проверки на победу) состялась ли ничья.
*/
humanTurn();
printMap();
if (isHumanWon()) {
System.out.println("Вы победили!");
break;
}
if (isDraw()) {
System.out.println("Ничья!");
break;
}
aiTurn();
printMap();
if (isAiWon()) {
System.out.println("Вы проиграли :(");
break;
}
}
}
static void initMap()
{
map = new char[SIZE][SIZE];
for (int i = 0; i< SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
map[i][j] = DOT_EMPTY;
}
}
}
static void printMap()
{
for (int i = 0; i <= SIZE; i++ )
{
System.out.print(i + " ");
}
System.out.println();
for (int i = 0;i < SIZE; i++ )
{
System.out.print((i+1) + " ");
for(int j = 0; j < SIZE; j++ )
{
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
static void humanTurn()
{
Scanner sc = new Scanner(System.in);
int x;
int y;
do
{
System.out.println("Введите координаты в формате X Y");
x = sc.nextInt() - 1;
y = sc.nextInt() - 1;
}
while (!isCellValid(x, y));
map[y][x] = DOT_X;
}
static void aiTurn()
{
int x;
int y;
do {
x = sc.nextInt(SIZE);
y = sc.nextInt(SIZE);
}
while (!isCellValid(x, y));
System.out.println("Компьютер сходил в точку" + (x + 1) + (y + 1));
map[y][x] = DOT_0;
}
static boolean isCellValid(int x, int y)
{
if (x < 0 || x >= SIZE || y < 0 || y >= SIZE)
{
return false;
}
return map[y][x] == DOT_EMPTY;
}
static boolean isHumanWon() {
return checkWinner(DOT_X);
}
static boolean isAiWon() {
return checkWinner(DOT_0);
}
static boolean isDraw() {
boolean result = true;
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (map[i][j] == DOT_EMPTY) {
result = false;
break;
}
}
}
return result;
}
static boolean checkWinner(char symbol) {
// Выйгрышные состояния по вернтикали
if (map[0][0] == symbol && map[0][1] == symbol && map[0][2] == symbol) {
return true;
}
if (map[1][0] == symbol && map[1][1] == symbol && map[1][2] == symbol) {
return true;
}
if (map[2][0] == symbol && map[2][1] == symbol && map[2][2] == symbol) {
return true;
}
// Выйгрышные состояния по горизонтали
if (map[0][0] == symbol && map[1][0] == symbol && map[2][0] == symbol) {
return true;
}
if (map[0][1] == symbol && map[1][1] == symbol && map[2][1] == symbol) {
return true;
}
if (map[0][2] == symbol && map[1][2] == symbol && map[2][2] == symbol) {
return true;
}
// Выйгрышные состояния по диагоналям
if (map[0][0] == symbol && map[1][1] == symbol && map[2][2] == symbol) {
return true;
}
if (map[0][2] == symbol && map[1][1] == symbol && map[2][0] == symbol) {
return true;
}
return false;
}
}Editor is loading...