前提・実現したいこと
簡単な機能の五目並べを作っています。
同じ駒が5個並んだら、勝敗判定をしたいです。
発生している問題・エラーメッセージ
エラーメッセージ consolを確認すると、クリックしたマスだけ定義されていて、 そのほかはundefinedとなってしまいます。 なぜ配列の各配列の先頭のidの要素だけは取得できて、他の4つはundefinedとなってしまうのでしょうか? 該当するコードは63行目から、76行目ほどまでになります。 上手く5つ並んだidが取得できれば、everyメソッドで勝敗判定しようと考えています。
該当のソースコード
ソースコード const grid = document.querySelector('.grid') const width = 15 const squares = [] let currentPlayer = 0 function createBoard () { for (let i = 0; i < width * width - 1; i++) { const div = document.createElement('div') div.classList.add('square') grid.appendChild(div) squares.push(div) } for(let i = 0; i < squares.length; i++) { squares[i].setAttribute('data-id', i); } } document.addEventListener('click', e => { id = e.target.dataset.id if(currentPlayer === 0) { blackTurn(id) } else if (currentPlayer === 1) { whiteTurn(id) } }) function blackTurn(id) { if(squares[id].firstChild) { if(!squares[id].firstChild.classList.contains('black') && !squares[id].firstChild.classList.contains('white')) alert('Already taken!') } else putBlack(id) } function putBlack(id) { const div = document.createElement('div') div.classList.add('black') squares[id].appendChild(div) currentPlayer = 1 checkForWin(id) } function whiteTurn(id) { if(squares[id].firstChild) { if(!squares[id].firstChild.classList.contains('black') && !squares[id].firstChild.classList.contains('white')) alert('Already taken!') } else putWhite(id) } function putWhite(id) { const div = document.createElement('div') div.classList.add('white') squares[id].appendChild(div) currentPlayer = 0 checkForWin(id) } //check for win 63 function checkForWin (id) { 64 const winCombinations = [ 65 [id, id + 1, id + 2, id + 3, id + 4], 66 [id, id - 1, id - 2, id - 3, id - 4], 67 [id, id + 16, id + 32, id + 48, id + 64], 68 [id, id - 16, id - 32, id - 48, id - 64], 69 [id, id - 15, id - 30, id - 45, id - 60], 70 [id, id - 17, id - 34, id - 51, id - 68], 71 [id, id + 15, id + 30, id + 45, id + 60], 72 [id, id + 17, id + 34, id + 51, id + 68] 73 ] 74 winCombinations.forEach(comb => { 75 for(let i = 0; i < comb.length; i++) { 76 console.log(squares[comb[i]]); 77 } 78 }) } //display the winner document.addEventListener('DOMContentLoaded', createBoard)
html
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Gomoku</title> 8 <link rel="stylesheet" href="styles.css"> 9 <script src="app.js" defer></script> 10</head> 11<body> 12 <div class="grid"></div> 13</body> 14</html>
回答1件
あなたの回答
tips
プレビュー