OSDN Git Service

[update] : 勝敗の判定を実装
authorhayao <hayao@fascode.net>
Tue, 3 Aug 2021 23:50:45 +0000 (08:50 +0900)
committerhayao <hayao@fascode.net>
Tue, 3 Aug 2021 23:50:45 +0000 (08:50 +0900)
sanmoku/script/init.js
sanmoku/script/main.js

index f5a5525..c893bbf 100644 (file)
@@ -15,8 +15,10 @@ const InitilizeTable = () => {
             td.dataset.clicked = false; // ボックスの状態を「クリックされていない」にする\r
 \r
             // 座標を設定\r
-            td.dataset.x = x;\r
-            td.dataset.y = y;\r
+            td.dataset.x = x; // X軸方向が同じグループを作成\r
+            td.dataset.y = y; // Y軸方向が同じグループを作成\r
+            td.setAttribute("id", `${x},${y}`)\r
+            \r
 \r
 \r
             // ボックスを表示\r
index 1611402..26fd439 100644 (file)
@@ -47,8 +47,14 @@ window.addEventListener("load", ()=>{
 // 配列の重複した値が指定回数以上ならTrueを返す
 // 使い方: CountArrayValue(配列, 回数)
 // 参考: https://teratail.com/questions/98451
-const CountArrayValue = (array, count) => {
-    // あとで実装する
+//      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;
 }
 
 // 勝敗の判定 ジャッジメントですの!
@@ -60,8 +66,9 @@ const Judgement = () => {
         const elements = Array.from(MainTable.querySelectorAll("[data-player]"));
 
         // 今チェック中のプレーヤーのチェックしたボックスの座標
-        CheckedByCurrentPlayerX = [];
-        CheckedByCurrentPlayerY = [];
+        CheckedByCurrentPlayerX = []; // X軸方向のチェックしたボックスのリスト
+        CheckedByCurrentPlayerY = []; // Y軸方向のチェックしたボックスのリスト
+        CheckedbyCurrentPlayerD = []; // 斜め方向のチェックしたボックスのリスト
 
         // 上で取得したボックスの一覧1つ1つで確認処理を行う
         elements.forEach((e) => {
@@ -75,8 +82,56 @@ const Judgement = () => {
         });
 
         // X軸方向の確認
-        //if ()
-        console.log(CountArrayValue(CheckedByCurrentPlayerX, TableXNumber))
+        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<TableXNumber; i++){
+                    let e = document.getElementById(`${i},${i}`)
+                    if (e.dataset.clicked == "true" && e.dataset.player == p){
+                        CheckedbyCurrentPlayerD.push(`${i},${i}`);
+                    }
+                }
+
+                if(CheckedbyCurrentPlayerD.length == TableXNumber){
+                    Msg.innerText = PlayerMarks[p] + "が左上からの斜め方向で勝ちました"
+                    GameEnded = true;
+                }
+            }
+
+            // 斜め方向の判定を初期化
+            CheckedbyCurrentPlayerD.splice(0)
+
+            // 右上からの斜め方向の判定
+            {
+                for(x=TableXNumber-1; x > -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座標")