-
Notifications
You must be signed in to change notification settings - Fork 0
/
hra.js
117 lines (103 loc) · 2.98 KB
/
hra.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
import { findWinner } from 'https://unpkg.com/piskvorky@0.1.4';
// definování proměnných
let currentPlayer = 'circle';
const buttons = document.querySelectorAll('.playground__button');
const imagePlayer = document.querySelector('.image-player');
const repeatButton = document.querySelector('#restart-button');
// funkce odehrání
const odehrani = (event) => {
if (currentPlayer === 'circle') {
event.target.classList.toggle('board__field--circle');
currentPlayer = 'cross';
imagePlayer.src = 'images/cross.svg';
} else {
event.target.classList.toggle('board__field--cross');
currentPlayer = 'circle';
imagePlayer.src = 'images/circle.svg';
}
event.target.disabled = true;
evaluation();
};
// alerts na reload
const varovani = (event) => {
const confirmation = window.confirm('Opravdu chceš začít znovu?');
if (confirmation) {
window.location.reload();
} else {
event.preventDefault();
}
};
// volání funkce varování na zpětném tlačítku
repeatButton.addEventListener('click', varovani);
// volání odehrání na každém eventu na poli
buttons.forEach((button) => {
button.addEventListener('click', odehrani);
});
// evaluace herního postupu
const evaluation = async () => {
let field = [];
buttons.forEach((button) => {
if (button.classList.contains('board__field--circle')) {
field.push('o');
} else if (button.classList.contains('board__field--cross')) {
field.push('x');
} else {
field.push('_');
}
});
// spuštění rozhodovací funkce
const winner = findWinner(field);
// časovače odpovědí
if (winner === 'o' || winner === 'x') {
// alert
setTimeout(() => {
alert(`Vyhrál hráč se symbolem ${winner}.`);
}, 500);
// reload hry
setTimeout(() => {
location.reload();
}, 1000);
} else if (winner === 'tie') {
setTimeout(() => {
alert(`Hra skončila remízou.`);
}, 500);
setTimeout(() => {
location.reload();
}, 1000);
// podmínka pro AI cross hráče
} else if (winner === null && currentPlayer === 'cross') {
// znemožnění odehrání circle
buttons.forEach((button) => {
button.disabled = true;
});
// volání odpovědi API
const response = await fetch(
'https://piskvorky.czechitas-podklady.cz/api/suggest-next-move',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
board: field,
player: 'cross',
}),
},
);
// převedení dat
const data = await response.json();
const { x, y } = data.position;
const gamefield = buttons[x + y * 10];
// obnovení tlačítek
buttons.forEach((button) => {
const shouldEnable = !(
button.classList.contains('board__field--circle') ||
button.classList.contains('board__field--cross')
);
if (shouldEnable) {
button.disabled = false;
}
});
gamefield.click();
}
};