Uhakiki wa Ushindi wa Mchezo wa Tic-Tac-Toe kwenye JavaScript
Sasa imewadia wakati wa kuandika msimbo ambao utabainisha ushindi na kutaja jina la mshindi.
Baada ya kufikiria kazi hiyo, inaweza kubainika kuwa ukaguzi wa uwepo wa ushindi unapaswa kufanywa kwa kila hatua:
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);
// hapa tunapaswa kukagua ushindi au ushindi wa sare
i++;
});
}
}
Wacha tutengeneze kitendakazi isVictory,
ambayo itachukua safu ya seli kama kigezo
na kurudisha true ikiwa kwenye uwanja
kuna ushindi, na false ikiwa hakuna. Tutatumia
kitendakazi hiki kama ifuatavyo:
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('jina la mshindi');
}
i++;
});
}
}
Vipi tunaweza kujua jina la mshindi? Ni wazi,
kuwa jina lake limehifadhiwa katika kila moja ya seli
zilizoshinda. Naelezea: ikiwa tuna ushindi, basi
hii inamaanisha kuwa baadhi ya seli 3
usawa, wima au diagonally zina
thamani sawa: ama alama ya X, ama alama ya O.
Ni wazi, kuwa thamani ya yoyote kati ya seli hizi ndio jina la mshindi. Lakini unaweza kwenda kwa njia nyingine, isioonekana wazi: kwa kuwa tunabainisha uwepo wa ushindi kila hatua, basi ni mantiki, kuwa mshindi atakuwa mchezaji aliye fanya hatua ya mwisho. Jina la mchezaji huyo limo kwenye maandishi ya seli iliyobonyezwa:
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); // tunatoa jina la mshindi
}
i++;
});
}
}
Utendaji wa isVictory
Vipi tuweze kubainisha kiufundi uwepo wa ushindi kwenye uwanja? Ikiwa tutafikiria kwa ukweli kila kitu, basi inaweza kufikiwa hitimisho, kuwa kwenye uwanja kuna idadi maalum ya seti tatu za seli.
Hii inamaanisha kwa ajili ya ukaguzi wa ushindi unaweza tu kukagua seti hizi zote tatu. Inahitajika kukagua kwamba seti tatu zina thamani sawa zisizo wazi (yaani ama X, ama O).
Wacha tutengeneze safu ya pande mbili, ambayo kwa kila safu ndogo kutakuwa na nambari za seli za moja kati ya seti tatu:
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],
];
Wacha tuandike kwa kutumia safu hii ufafanuzi wa ushindi:
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;
}
Wewe mwenyewe, bila kuangalia kwenye msimbo wangu, itekeleze yaliyoelezewa. Kagua, jinsi mchakato wa mchezo unavyofanya kazi.
Jaribu kutekeleza ukaguzi wa ushindi wa sare. Katika somo linalofuata kutakuwa na uchambuzi wa sehemu hii.