Untitled
unknown
java
4 years ago
4.7 kB
5
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...