// 配列の重複した値が指定回数以上なら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;
}
// 勝敗の判定 ジャッジメントですの!
const elements = Array.from(MainTable.querySelectorAll("[data-player]"));
// 今チェック中のプレーヤーのチェックしたボックスの座標
- CheckedByCurrentPlayerX = [];
- CheckedByCurrentPlayerY = [];
+ CheckedByCurrentPlayerX = []; // X軸方向のチェックしたボックスのリスト
+ CheckedByCurrentPlayerY = []; // Y軸方向のチェックしたボックスのリスト
+ CheckedbyCurrentPlayerD = []; // 斜め方向のチェックしたボックスのリスト
// 上で取得したボックスの一覧1つ1つで確認処理を行う
elements.forEach((e) => {
});
// 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座標")