JS五子棋ディスコロボットの作成-4

24204 ワード

今日、グラビアを作成し、グラビアと5行を確認する関数を使用して5行を確認するコードを作成します.
まず、グラビアを作るためにあらかじめ手配しておいたコードがあるので、原理を簡単に説明したいのですが、どう説明すればいいか分からないので、そのままアップロードしました.
function makeSheet(x, y){
  let originalSheet = Array(y).fill("");

  for (let Y = 0; Y < y; Y++) {
    let u = ""

    for (let X = 0; X < x; X++) {
      if (Y == 0) {
        u += ((X == 0) ? ("┏") : (
          (X == x-1) ? "┓" : "┳"
        ))
      }

      else if (Y == y-1) {
        u += ((X == 0) ? "┗": (
          (X == x-1) ? ("┛") : "┻"
        ))
      }

      else {
        if (X == 0) u += "┣"
        else if (X == x-1) u +="┫"
        else u += "╋"
      }
    }

    originalSheet[Y] = u
  }

  return originalSheet.join("\n")
}
こんなハーモニー汚く見えるけどよく見ればわかる
グラビア
makeSheet(19, 19) result

┏┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┓
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┗┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┛

// 아마도 블로그 글 상에서는 이상하게 보일껍니다...원래는 거의 정사각형 모양입니다.
このように出力します.そしてこのグラビアは[0,0,0,0,0,0,0,0,0.],[0,0,0,0,0,0,0,0,0.....], [0,0,0,0,0,0,0,0,0.....], [0,0,0,0,0,0,0,0,0.....] .... ]
このように2次元0と1からなるアレイを作るために編んでみました簡単です.分割された各凹面の行を1文字で分割し、mapを使用してターゲット石を文字列に一致させ、1または0を返してから操作を再開します.コード:
function makeOmokArray(omokSheet, dol) {
  return omokSheet.split("\n").map(a=>a.split("").map(a=>(a==dol)?"1":"0").map(Number))
}
こうなる
次に、テストのためにコードを作成し、次のようにコードを返します.
const omokSheet = 
`┏┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┓
┣╋╋╋╋╋╋╋╋╋○╋╋╋╋╋╋╋┫
┣╋╋╋╋●╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋○╋●╋╋╋○╋╋╋╋╋╋╋┫
┣╋╋╋○╋╋●╋○╋○╋╋╋╋╋╋┫
┣╋╋╋○╋○╋●○╋╋╋╋╋╋╋╋┫
┣╋╋╋╋○╋╋╋●╋○╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋○╋╋╋╋╋╋╋╋┫
┣╋╋╋○○○╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫
┗┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┛`

function makeOmokArray(omokSheet, dol) {
  return omokSheet.split("\n").map(a=>a.split("").map(a=>(a==dol)?"1":"0").map(Number))
}

function checkFulfill(omokTwoArray) {
  let result = false
  for (let omokArrayIndex in omokTwoArray) {
    omokArrayIndex = Number(omokArrayIndex)
    let omokArray = omokTwoArray[omokArrayIndex];
    for (let omokIndex in omokArray) {
      omokIndex = Number(omokIndex)
      let parsedOmok = {
        lr: [],
        rl: [],
        vertical: [],
        horizontal: omokArray
      };
      for (let i = 0; i < 5; i++) {
        const nowOmok = omokTwoArray[omokArrayIndex + i];
        parsedOmok.lr.push(nowOmok ? nowOmok[omokIndex + i] : 0);
        parsedOmok.rl.push(nowOmok ? nowOmok[omokIndex - i] : 0);
        parsedOmok.vertical.push(nowOmok ? nowOmok[omokIndex] : 0);
      }
      if (parsedOmok.lr.join("").includes("1".repeat(5))) {
        result = "lr";
      }
      if (parsedOmok.rl.join("").includes("1".repeat(5))) {
        result = "rl";
      }
      if (parsedOmok.vertical.join("").includes("1".repeat(5))) {
        result = "vertical";
      }
      if (parsedOmok.horizontal.join("").includes("1".repeat(5))) {
        result = "horizontal";
      }
    }
  }
  return result
}

console.log(checkFulfill(
  makeOmokArray(omokSheet, "●")
))

// result : "lr"

console.log(checkFulfill(
  makeOmokArray(omokSheet, "○")
))

// result : false
はい、通常は希望する値が得られます.
次に、x、y、石の値を使用して石を必要なセルに配置する関数を実装します.

このようにx値とy値を受け入れる配列インデックス値を1つずつ表す場合は、上図のようにコード(?)を記述できます.
関数を実装するために使用します.
function addDol({
  omokSheet,
  x,
  y,
  dol
}) {
  const omokSheetArray = omokSheet.split("\n");
  const xArray = omokSheetArray[y].split("")
  xArray[x] = dol 
  
  omokSheetArray[y] = xArray.join("")
  
  return omokSheetArray.join("\n")
}
正常に動作.今日はここまでです.