⊗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 구현

필드에서 승리 조건을 기술적으로 어떻게 확인할 수 있을까요? 잘 생각해 보면, 필드에는 제한된 수의 3셀 조합이 있다는 결론에 도달할 수 있습니다.

즉, 승리를 확인하기 위해 단순히 모든 이 조합들을 확인하면 됩니다. 조합들이 동일하고 비어 있지 않은 값(즉, X 또는 O)을 가지고 있는지 확인해야 합니다.

2차원 배열을 만들고, 각 하위 배열에 각 조합의 셀 번호를 넣겠습니다:

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
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부