-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjs.js
130 lines (116 loc) · 4.46 KB
/
js.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//Создаем массив для хранения данных
let boarDate = [
[0,0,0],
[0,0,0],
[0,0,0]
]
alert("Привет! Это игра Крестики-Нолики. Сейчас можно играть только офлайн с другом. Игрок 1 - Крестики, Игрок 2 - Нолики. Для начала игры закройте это сообщение и выберите где поставить первый крестик.");
//Создание переменных для игры
let player = 1;
let gameOver = false;
//Извлечь ячейки из ДОМа
const cellElements = document.querySelectorAll(".cell");
//Извлеку текст результата из ДОМа
const resultElement = document.getElementById("result");
//Добавляем "прослушиватель" событий
cellElements.forEach((cell, index) => {
cell.addEventListener("click", () => {
placeMarker(index);
})
})
//Создаем функцию для установки маркеров
function placeMarker(index) {
//Разбиваем строки и столбцы на индексы
let col = index % 3;
let row = (index - col) / 3;
//проверяем что ячейка пустая
if (boarDate[row][col] == 0 && gameOver == false) {
boarDate[row][col] = player;
// Меняем игрока
player *= -1;
drawMarker();
//Проверка результата
checkResult();
}
}
//функция рисования маркеров маркеров игроков
function drawMarker() {
//Перебираем строки
for(let row = 0; row < 3; row++) {
//Перебираем столбцы
for(let col = 0; col < 3; col++)
//Проверяем есть ли маркер игрока
if(boarDate[row][col] == 1) {
//Обнови класс ечеек чтобы добавить крестик
cellElements[(row * 3) + col].classList.add("cross");
} else if(boarDate[row][col] == -1){
//Обнови класс ечеек чтобы добавить нолик
cellElements[(row * 3) + col].classList.add("circle");
}
}
}
//создадим функцию для проверки результатов игры
function checkResult() {
//Проверяем строки и столбцы
for(let i = 0; i < 3; i++) {
let rowSum = boarDate[i][0] + boarDate[i][1] + boarDate[i][2];
let colSum = boarDate[0][i] + boarDate[1][i] + boarDate[2][i];
if(rowSum == 3 || colSum == 3) {
//Игрок 1 выиграл
endGame(1);
return
} else if(rowSum == -3 || colSum == -3) {
//Игрок 2 выиграл
endGame(2);
return
}
}
//Проверка диагоналей
let giagonalSum1 = boarDate[0][0] + boarDate[1][1] + boarDate[2][2];
let giagonalSum2 = boarDate[0][2] + boarDate[1][1] + boarDate[2][0];
if(giagonalSum1 == 3 || giagonalSum2 == 3) {
//Игрок 1 выиграл
endGame(1);
return
} else if(giagonalSum1 == -3 || giagonalSum2 == -3) {
//Игрок 2 выиграл
endGame(2);
return
}
//Проверка на ничью
if(boarDate[0].indexOf(0) == -1 &&
boarDate[1].indexOf(0) == -1 &&
boarDate[2].indexOf(0) == -1) {
endGame(0);
return
}
}
//Функция для завершения игры и вывода результата
function endGame(winner) {
//Trigger game over
gameOver = true;
//Проверка на ничью
if(winner == 0) {
resultElement.innerText = "Это ничья!";
} else {
resultElement.innerText = `Игрок ${winner} победил!`
}
}
//Рестар игры
const restartButton = document.getElementById("restart");
//Добавляем прослушиватель событий кнопки рестарта
restartButton.addEventListener("click", () => {
//Сбросить игровые переменные
boarDate = [
[0,0,0],
[0,0,0],
[0,0,0]
]
player = 1;
gameOver = false;
//Ресет поля
cellElements.forEach(cell => {
cell.classList.remove("cross", "circle")
})
resultElement.innerText = "";
});