JavaScript-da "X" va "O" o‘yinida g‘alabani tekshirish
Endi g‘alabani aniqlaydigan va g‘olib ismini chiqaradigan kodni yozish vaqti keldi.
Vazifani o‘ylab ko‘rgach, g‘alaba bor-yo‘qligini tekshirish har bir yurishda bajarilishi kerakligini tushunish mumkin:
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);
// bu yerda biz g‘alaba yoki durangni tekshirishimiz kerak
i++;
});
}
}
Keling, isVictory funksiyasini yarataylik,
bu parametr sifatida katakchalar massivini qabul qiladi
va maydonda g‘alaba bo‘lsa true,
bo‘lmasa false qaytaradi. Biz
ushbu funksiyadan quyidagicha foydalanamiz:
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('g‘olibning ismi');
}
i++;
});
}
}
G‘olibning ismini qanday bilamiz? Shubhasiz,
uning ismi g‘alaba qozongan katakchalarning
har birida saqlanadi. Tushuntiray: agar g‘alaba bo‘lsa,
bu shuni anglatadiki, gorizontal, vertikal yoki diagonal bo‘yicha
aynan 3 ta katakcha
bir xil qiymatni o‘z ichiga oladi: ya "X", ya "O".
Shubhasiz, bu katakchalarning har qandayining qiymati aynan g‘olibning ismidir. Ammo boshqa, unchalik aniq bo‘lmagan yo‘l bilan ham borish mumkin: g‘alaba bor-yo‘qligini har bir yurishda aniqlayotganimiz sababli, g‘olib oxirgi yurishni amalga oshirgan o‘yinchi bo‘lishi mantiqan. Ushbu o‘yinchining ismi bosilgan katakcha matnida joylashgan:
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); // g‘olibning ismini chiqaramiz
}
i++;
});
}
}
isVictory ni amalga oshirish
Maydonda g‘alaba bor-yo‘qligini texnik jihatdan qanday aniqlaymiz? Agar yaxshi o‘ylab ko‘rilsa, maydonda cheklangan miqdordagi katakchalarning uchtalik kombinatsiyalari mavjud degan xulosaga kelish mumkin.
Ya'ni g‘alabani tekshirish uchun shunchaki barcha bu uchtaliklarni tekshirish mumkin. Har bir uchtalikda bir xil va bo‘sh bo‘lmagan qiymatlar borligini tekshirish kerak (ya'ni u yerda "X" yoki "O" bo‘lishi kerak).
Ikkita o‘lchamli massiv yaratamiz, uning har bir ichki massivida uchtaliklardan birining katakcha raqamlari bo‘ladi:
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],
];
Ushbu massiv yordamida g‘alabani aniqlovchi kodni yozamiz:
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;
}
Mustaqil ravishda, mening kodimga qaramay, bayon qilingan narsani amalga oshiring. O‘yin jarayoni qanday ishlashini tekshiring.
Durangni tekshirishni amalga oshirishga harakat qiling. Keyingi darsda bu joyning tahlili bo‘ladi.