JavaScript-de “X-O” oýunynda ýeňişi barlamak
Indi ýeňiji anyklap, onuň adyny çykaryjy kody ýazmagyň wagty geldi.
Meseläni gözden geçirip, ýeňişi barlamagyň her bir gedişde ýerine ýetirilmeginiň zerurlygyny düşünip bilersiňiz:
function init(selector) {
let cells = document.querySelectorAll('#field td');
let i = 0;
for (let cell of cells) {
cell.addEventListener('click', function step() {
this.textContent = ['X', 'O'][i % 2];
this.removeEventListener('click', step);
// şu ýerde ýeňişi ýa-da deňçiligi barlamaly
i++;
});
}
}
Geliň, isVictory funksiýasyny düzeliň,
bu funksiýa parametri hökmünde ýaýkalaryň
masywyn alyp, meýdanda ýeňiş bar bolsa true,
ýok bolsa false gaýtarsyn. Bu funksiýany
aşakdaky ýaly ulanyp bileris:
function start(cells) {
let i = 0;
for (let cell of cells) {
cell.addEventListener('click', function step() {
this.textContent = ['X', 'O'][i % 2];
this.removeEventListener('click', step);
if (isVictory(cells)) {
alert('ýeňijiniň ady');
}
i++;
});
}
}
Ýeňijiniň adyny nädip bileris? Aýdyň ýaly,
onuň ady ýeňen ýaýkalaryň her birinde saklanylýar.
Daýançladyýarym: ýeňiş barda, bu
3 sany ýaýkalaryň gorizontal, wertikal
ýa-da diagonal boýunca birmeňzeş baha eýe bolýandygyny görkezýär:
ýa-da “X” ýa-da “O”.
Şu ýaýkalaryň haýsydyr biriniň bahasynyň ýeňijiniň ady bolýandygy aýdyň. Emma has az aýdyň bolan beýleki ýola hem gitmek mümkin: ýeňiş bardygyny her gidişde kesgitleýäniňiz üçin, logiki taýdan, soňky gidişi eden oýunçy ýeňiji bolup biler. Bu oýunçynyň ady basylan ýaýkanyň tekstinde ýerleşýär:
function start(cells) {
let i = 0;
for (let cell of cells) {
cell.addEventListener('click', function step() {
this.textContent = ['X', 'O'][i % 2];
this.removeEventListener('click', step);
if (isVictory(cells)) {
alert(this.textContent); // ýeňijiniň adyny çykarýarys
}
i++;
});
}
}
isVictory funksiýasyny amala aşyrmak
Meýdanda ýeňiş bardygyny tehniki taýdan nädip kesgitläp bileris? Eger hemmesini gowy gözden geçirseňiz, meýdanyň çäklenen sany üçlük ýaýkalardan ybaratdygyna gelip bilersiňiz.
Ýagny ýeňişi barlamak üçin diňe şu üçlükleriň hemmesini barlap bolýar. Üçlükleriň birmeňzeş we boş däl bahalara eýe bolmagyny barlamaly (ýagny ol ýerde ýa “X” ýa-da “O” bolmaly).
Iki ölçegli massiw düzeliň, onuň her bir kiçi massiwi üçlügiň biriniň ýaýka nomerlerini öz içine alsyn:
let combs = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6],
];
Bu massiwden peýdalanyp ýeňişi kesgitlemek funksiýasyny ýazaýaly:
function isVictory(cells) {
let combs = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6],
];
for (let comb of combs) {
if (
cells[comb[0]].textContent == cells[comb[1]].textContent &&
cells[comb[1]].textContent == cells[comb[2]].textContent &&
cells[comb[0]].textContent != ''
) {
return true;
}
}
return false;
}
Özbaşdak, meniň koduma seretmän, beýan edileni amala aşyryň. Oýun prosesiniň nädip işleýändigini barlaň.
Deňçiligi barlamagy amala aşyrmagy synaň. Indiki sapakda bu ýeriň düşündirişi berler.