⊗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 უჯრა ჰორიზონტალურად, ვერტიკალურად ან დიაგონალზე შეიცავს ერთნაირ მნიშვნელობას: ან X, ან O.

ცხადია, რომ ამ უჯრებიდან ნებისმიერის მნიშვნელობა არის გამარჯვებულის სახელი. მაგრამ შესაძლებელია სხვა, ნაკლებად აშკარა გზით წავიდეთ: რადგან ჩვენ განვსაზღვრავთ მოგების არსებობას ყოველ სვლაზე, მაშინ ლოგიკურია, რომ გამარჯვებული იქნება ის მოთამაშე, ვინც ბოლო სვლა შეასრულა. ამ მოთამაშის სახელი ინახება დაწკაპუნებული უჯრის ტექსტში:

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-ის რეალიზაცია

როგორ განვსაზღვროთ ტექნიკურად მოგების არსებობა დაფაზე? თუ ყველაფერი კარგად გავაანალიზებთ, მაშინ შეგვიძლია მივიდეთ დასკვნამდე, რომ დაფაზე უჯრების სამეულების რაოდენობა შეზღუდულია.

ანუ მოგების შესამოწმებლად შეგვიძლია უბრალოდ შევამოწმოთ ყველა ეს სამეული. საჭიროა შევამოწმოთ ის, რომ სამეულებს აქვთ ერთნაირი, არა ცარიელი მნიშვნელობები (ანუ ან X, ან O).

შევქმნათ ორგანზომილებიანი მასივი, რომლის თითოეულ ქვემასივში იქნება ერთ-ერთი სამეულის უჯრების ნომრები:

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

დამოუკიდებლად, ჩემს კოდში ჩახედვის გარეშე, განახორციელეთ აღწერილი. შეამოწმეთ, როგორ მუშაობს თამაშის პროცესი.

სცადეთ განახორციელოთ ფრის შემოწმება. შემდეგ გაკვეთილში იქნება ამ ადგილის ანალიზი.

azbydeenesfrkakkptruuz