From 596fe26e6ddede23f1b230f796847419d7485105 Mon Sep 17 00:00:00 2001 From: hayao Date: Wed, 4 Aug 2021 08:58:24 +0900 Subject: [PATCH] =?utf8?q?[add]=20:=20=E5=88=A4=E5=AE=9A=E3=82=92=E5=88=A5?= =?utf8?q?=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AB=E7=A7=BB?= =?utf8?q?=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- sanmoku/index.html | 1 + sanmoku/script/judgement.js | 96 ++++++++++++++++++++++++++++++++++++++++ sanmoku/script/main.js | 105 +++----------------------------------------- 3 files changed, 102 insertions(+), 100 deletions(-) create mode 100644 sanmoku/script/judgement.js diff --git a/sanmoku/index.html b/sanmoku/index.html index cdc1273..3804e9a 100644 --- a/sanmoku/index.html +++ b/sanmoku/index.html @@ -44,6 +44,7 @@ + diff --git a/sanmoku/script/judgement.js b/sanmoku/script/judgement.js new file mode 100644 index 0000000..8b5fad5 --- /dev/null +++ b/sanmoku/script/judgement.js @@ -0,0 +1,96 @@ +// 配列の重複した値が指定回数以上ならTrueを返す +// 使い方: CountArrayValue(配列, 回数) +// 参考: https://teratail.com/questions/98451 +// https://teratail.com/questions/352619 +const CountArrayValue = (array, number) => { + let count = {}; + for (let i of array) { + count[i] = (count[i] || 0) + 1; + if (count[i] == number) return true; + } + return false; +} + +// 勝敗の判定 ジャッジメントですの! +const Judgement = () => { + // プレーヤーごとに判定 + // プレーヤーIDでループし、変数pに今チェック対象のプレーヤーIDが代入される + for (p=0; p < PlayerNumer; p++){ + // チェックしたプレーヤーのIDが書き込まれたボックスの一覧を取得 + const elements = Array.from(MainTable.querySelectorAll("[data-player]")); + + // 今チェック中のプレーヤーのチェックしたボックスの座標 + CheckedByCurrentPlayerX = []; // X軸方向のチェックしたボックスのリスト + CheckedByCurrentPlayerY = []; // Y軸方向のチェックしたボックスのリスト + CheckedbyCurrentPlayerD = []; // 斜め方向のチェックしたボックスのリスト + + // 上で取得したボックスの一覧1つ1つで確認処理を行う + elements.forEach((e) => { + + if (e.dataset.player == p){ // もしいま確認しているボックスが今確認しているプレーヤーIDと一致したら + + // チェックされているボックスの座標を座標リストに追加する + CheckedByCurrentPlayerX.push(e.dataset.x); + CheckedByCurrentPlayerY.push(e.dataset.y); + } + }); + + // X軸方向の確認 + if (CountArrayValue(CheckedByCurrentPlayerX, TableXNumber)){ + Msg.innerText = p + "がX軸方向で勝ちました"; + GameEnded = true; + } + + // Y軸方向の確認 + if (CountArrayValue(CheckedByCurrentPlayerY, TableYNumber)){ + Msg.innerText = p + "がY軸方向で勝ちました" + GameEnded = true; + } + + + // 斜め方向の判定 + if (TableXNumber == TableYNumber){ // 正方形の場合のみ (X軸とY軸の大きさが一致) + + // 左上からの斜め方向の判定 + { + for (i=0; i -1; x--){ + let y = TableXNumber - x - 1; + let e = document.getElementById(`${x},${y}`); + if (e.dataset.clicked == "true" && e.dataset.player == p){ + CheckedbyCurrentPlayerD.push(`${x},${y}`); + } + } + if(CheckedbyCurrentPlayerD.length == TableXNumber){ + Msg.innerText = PlayerMarks[p] + "が右上からの斜め方向で勝ちました" + GameEnded = true; + } + } + } + + + + // ログ表示 + //console.log(p + "のチェック済みのX座標") + //console.log(CheckedByCurrentPlayerX) + //console.log(p + "のチェック済みのY座標") + //console.log(CheckedByCurrentPlayerY) + } +} diff --git a/sanmoku/script/main.js b/sanmoku/script/main.js index 26fd439..7b0a52c 100644 --- a/sanmoku/script/main.js +++ b/sanmoku/script/main.js @@ -1,3 +1,8 @@ +// 最初にのみログを表示する +window.addEventListener("load", ()=>{ + console.log(CurrentPlayer + "でゲームをスタートします") +}) + // ボックスがクリックされたときの処理 // init.jsでボタンがクリックされた場合にClickedBox関数を実行するように指示している const ClickedBox = (e) => { @@ -39,104 +44,4 @@ const ChangePlayer = () => { console.log("現在のプレイヤーは" + CurrentPlayer + "です") //ログを表示する } -// 最初にのみログを表示する -window.addEventListener("load", ()=>{ - console.log(CurrentPlayer + "でゲームをスタートします") -}) -// 配列の重複した値が指定回数以上ならTrueを返す -// 使い方: CountArrayValue(配列, 回数) -// 参考: https://teratail.com/questions/98451 -// https://teratail.com/questions/352619 -const CountArrayValue = (array, number) => { - let count = {}; - for (let i of array) { - count[i] = (count[i] || 0) + 1; - if (count[i] == number) return true; - } - return false; -} - -// 勝敗の判定 ジャッジメントですの! -const Judgement = () => { - // プレーヤーごとに判定 - // プレーヤーIDでループし、変数pに今チェック対象のプレーヤーIDが代入される - for (p=0; p < PlayerNumer; p++){ - // チェックしたプレーヤーのIDが書き込まれたボックスの一覧を取得 - const elements = Array.from(MainTable.querySelectorAll("[data-player]")); - - // 今チェック中のプレーヤーのチェックしたボックスの座標 - CheckedByCurrentPlayerX = []; // X軸方向のチェックしたボックスのリスト - CheckedByCurrentPlayerY = []; // Y軸方向のチェックしたボックスのリスト - CheckedbyCurrentPlayerD = []; // 斜め方向のチェックしたボックスのリスト - - // 上で取得したボックスの一覧1つ1つで確認処理を行う - elements.forEach((e) => { - - if (e.dataset.player == p){ // もしいま確認しているボックスが今確認しているプレーヤーIDと一致したら - - // チェックされているボックスの座標を座標リストに追加する - CheckedByCurrentPlayerX.push(e.dataset.x); - CheckedByCurrentPlayerY.push(e.dataset.y); - } - }); - - // X軸方向の確認 - if (CountArrayValue(CheckedByCurrentPlayerX, TableXNumber)){ - Msg.innerText = p + "がX軸方向で勝ちました"; - GameEnded = true; - } - - // Y軸方向の確認 - if (CountArrayValue(CheckedByCurrentPlayerY, TableYNumber)){ - Msg.innerText = p + "がY軸方向で勝ちました" - GameEnded = true; - } - - - // 斜め方向の判定 - if (TableXNumber == TableYNumber){ // 正方形の場合のみ (X軸とY軸の大きさが一致) - - // 左上からの斜め方向の判定 - { - for (i=0; i -1; x--){ - let y = TableXNumber - x - 1; - let e = document.getElementById(`${x},${y}`); - if (e.dataset.clicked == "true" && e.dataset.player == p){ - CheckedbyCurrentPlayerD.push(`${x},${y}`); - } - } - if(CheckedbyCurrentPlayerD.length == TableXNumber){ - Msg.innerText = PlayerMarks[p] + "が右上からの斜め方向で勝ちました" - GameEnded = true; - } - } - } - - - - // ログ表示 - //console.log(p + "のチェック済みのX座標") - //console.log(CheckedByCurrentPlayerX) - //console.log(p + "のチェック済みのY座標") - //console.log(CheckedByCurrentPlayerY) - } -} -- 2.11.0