⊗jsPrTTTVCh 45 of 62 menu

Бозии крестикҳо-нулӣ дар JavaScript ғолибиро тафтиш кардан

Ҳоло вақти он расидааст, ки рамзеро нависед, ки ғолибиро муайян карда ва номи ғолибро чоп кунад.

Пас аз таҳлили вазифа, метавон фаҳмид, ки тафтиши барои ғолибӣ бояд дар ҳар як ҳаракат иҷро шавад:

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); // дар ин ҷо мо бояд ғолибӣ ё баробарӣро тафтиш кунем i++; }); } }

Биёед функсияи isVictory созем, ки параметраш массивро қабул мекунад ҳуҷайраҳо ва true бармегардонад, агар дар майдон ғолибӣ вуҷуд дошта бошад, ва false, агар набошад. Мо аз ин функсия ба тариқи зерин истифода мебарем :

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('номи ғолиб'); } i++; }); } }

Чи тавр мо номи ғолибро бидонем? Ошкора, ки номи ӯ дар ҳар як аз ҳуҷайраҳои ғолиб нигоҳ дошта мешавад. Шарҳ медиҳам: агар мо ғолибӣ дошта бошем, он гоҳ ин маъноро дорад, ки баъзе 3 ҳуҷайраҳо ба тариқи уфуқӣ, амудӣ ё диагоналӣ дорои якҷинса қимат мебошанд: ё крестик, ё нолик.

Ошкора, ки қимати ягон аз ин ҳуҷайраҳо ҳамон номи ғолиб аст. Аммо метавон рафт ва дигар, камтар равшан роҳ: чун мо вуҷуди ғолибиро дар ҳар як ҳаракат муайян мекунем, пас мантиқӣ аст, ки ғолиб бозигаре хоҳад буд, ки охирин ҳаракатро анҷом додааст. Номи ин бозигар дар матни ҳуҷайраи кликшуда нигоҳ дошта мешавад:

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); // номи ғолибро чоп мекунем } i++; }); } }

Амалисозии isVictory

Чи тавр мо аз рӯи техникӣ вуҷуди ғолибиро дар майдон муайян кунем? Агар хуб ҳама чизро таҳлил кунем, пас метавон ба хулосае омад, ки дар майдон миқдори маҳдуди сеҳуҷайраҳо вуҷуд дорад.

Яъне барои тафтиши ғолибӣ метавон танҳо ҳама ин сеҳуҷайраҳоро тафтиш кард. Бояд тафтиш кард, ки сеҳуҷайраҳо якҷинса қиматҳои холӣ нестанд (яъне дар он ҷо ё крестик, ё нолик).

Массиви дученака месозем, ки дар ҳар як зермассив рақамҳои ҳуҷайраҳои яке аз сеҳуҷайраҳо бошанд:

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], ];

Бо истифода аз ин массив муайян кардани ғолибиро нависем:

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; }

Худ, бе нигаристан ба рамзи ман, амолисозии тавсифшударо иҷро кунед. Тафтиш кунед, ки фаъолияти бозӣ чӣ гуна кор мекунад.

Кӯшиш кунед, ки тафтиши баробариро амалӣ кунед. Дар дарси оянда таҳлили ин ҷо хоҳад буд.

Тоҷикӣ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан