๐Ÿคช ์ž๊ธฐ์†Œ๊ฐœ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ - 4

ํ•˜ํƒœํ˜„ยท2020๋…„ 11์›” 5์ผ
2

์ž๊ธฐ์†Œ๊ฐœ ํŽ˜์ด์ง€

๋ชฉ๋ก ๋ณด๊ธฐ
4/4

์ฒ˜์Œ javascript๋ฅผ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๊ฒ€์ƒ‰์„ ํ•˜๋ฉด์„œ ๋งŽ์ด ๋ดค๋˜ ์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค. ๊ทธ ๋‹น์‹œ์—๋Š” ๋„ˆ๋ฌด ์–ด๋ ค์›Œ ๋ณด์—ฌ์„œ ๋„์ „ํ•ด๋ณผ ์—„๋‘๊ฐ€ ์•ˆ๋‚ฌ์—ˆ๋Š”๋ฐ ๊ทธ ๋•Œ ํฌ๊ธฐํ–ˆ๋˜ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ ๋‚˜๋‹ˆ ๋„ˆ๋ฌด ํ–‰๋ณตํ–ˆ๋‹ค.

๊ฒŒ์ž„ ๊ตฌํ˜„์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜ ๋ชฉ๋ก

function setLevel() {}  // ๋‚œ์ด๋„ ์„ค์ •
function GameRestart() {}  // ์žฌ์‹œ์ž‘
function resetBoard() {}  // ๋ณด๋“œ ํด๋ฆฌ์–ด
function gameOver(result) {}  // ๊ฒŒ์ž„ ์ข…๋ฃŒ
function gameResult(mineCount) {} // ๊ฒŒ์ž„ ๊ฒฐ๊ณผ
function openBlock() {}  // ๋ธ”๋ก ํด๋ฆญ ์ด๋ฒคํŠธ
function viewBlock(row, column) {}  // ํด๋ฆญ ๋ธ”๋Ÿญ ์ง€๋ขฐ ๊ฐฏ์ˆ˜ ํ‘œ์‹œ
function checkMine(chkRow, chekColumn) {}  // ์ฃผ๋ณ€ 8๋ฐฉ ์ง€๋ขฐ ์ฒดํฌ
function randomNumber() {}  // ์ง€๋ขฐ ์‹ฌ๊ธฐ
function createBoard() {}  // ๋‚œ์ด๋„์— ๋งž๊ฒŒ ๋ธ”๋Ÿญ ๋ Œ๋”๋ง

์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„์„ ์ •๋ฆฌ ํ•ด๋ณด๊ฒ ๋‹ค....๐Ÿ˜…

๋žœ๋คํ•œ ์œ„์น˜์— ์ง€๋ขฐ ์‹ฌ๊ธฐ

  function randomNumber() {
    for (let i = 0; i < setRow; i++) {
      // 2์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ค์–ด์ฃผ๊ธฐ.
      randomArr.push([]);
      for (let j = 0; j < setColumn; j++) {
        randomArr[i].push(0);
      }
    }
    for (let i = 0; i < mineCount; i++) {
      let randomRow = Math.floor(Math.random() * setRow);
      let randomcolumn = Math.floor(Math.random() * setColumn);
      if (randomArr[randomRow][randomcolumn] === "m") {
        i--;
      } else {
        randomArr[randomRow][randomcolumn] = "m";
        checkMine(randomRow, randomcolumn, randomArr);
      }
    }
  }

๋ฐ”๋‘‘ํŒ์‹ ๋ฐฐ์—ด์ด๋ผ 9X9(์ดˆ๊ธ‰)๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๋žœ๋คํ•œ ์นธ์— ์ง€๋ขฐ๋ฅผ ์‹ฌ๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋‹ค.

  • ๋นˆ ๋ฐฐ์—ด ์ƒ์„ฑ ํ›„, ๋นˆ ๊ฐ’(0)์„ ์ž…๋ ฅํ•ด์ค€๋‹ค.
  • ๋žœ๋คํ•œ ์ˆซ์ž๋ฅผ 0~9(๋‚œ์ด๋„์— ๋”ฐ๋ผ ๋‹ค๋ฆ„) ํ–‰๊ณผ ์—ด์„ ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ƒ์„ฑ
  • ["random Raw"]["randome Column"] ๋กœ ์ ‘๊ทผํ•˜์—ฌ ์ง€๋ขฐ๋ฅผ ์‹ฌ์–ด์ค€๋‹ค.
  • ์ž„์˜ ์นธ์— ์ด๋ฏธ ์ง€๋ขฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ž„์˜ ๊ฐ’์€ ํ๊ธฐํ•˜๊ณ  ๋‹ค์‹œ ๋ฝ‘๋Š”๋‹ค.
  • ์ง€๋ขฐ๋ฅผ ์‹ฌ์„ ๋•Œ checkMine()ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ฃผ๋ณ€ 8์นธ์— 1์”ฉ ๋”ํ•ด์ค€๋‹ค.(์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ์นธ์€ ์ฃผ๋ณ€์— ์ง€๋ขฐ๊ฐ€ ์‹ฌ์–ด์งˆ ๋•Œ๋งˆ๋‹ค ์ˆซ์ž๊ฐ€ 1์”ฉ ์˜ฌ๋ผ๊ฐ„๋‹ค.)

์ฃผ๋ณ€ 8์นธ ๊ฒ€์‚ฌ

  function checkMine(chkRow, chekColumn) {
    for (let i = chkRow - 1; i < chkRow + 2; i++) {
      for (let j = chekColumn - 1; j < chekColumn + 2; j++) {
        if (
          i < 0 ||
          j < 0 ||
          i >= setRow ||
          j >= setColumn ||
          (i === chkRow && j === chekColumn)
        ) {
          continue;
        }
        randomArr[i][j] += randomArr[i][j] !== "m" ? 1 : "";
      }
    }
  }

์ฒ˜์Œ์—” 8์นธ์ด๋ผ ํ•œ์นธ์”ฉ ์ง์ ‘ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ์ฐพ์•„๋ณด๊ธฐ๋„ ํ•˜๊ณ  ๋ช‡์‹œ๊ฐ„ ๊ณ ๋ฏผํ•ด์„œ row/column ๊ฐ’์„ ๋ฐ›์•„ for๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.

  • (1,1) ์ฃผ๋ณ€ 8์นธ (0,0) ~ (2,2) ์„ ๊ฒ€์ƒ‰ ํ•˜๋ ค๋ฉด
    ํ–‰์„ 0~2 ๊นŒ์ง€ ๊ฒ€์ƒ‰, ์—ด์„ 0~2๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
    chkRow - 1 < i <= chkRow + 2
    chkColumn - 1 < j <= chkColumn + 2
  • ๊ฒ€์‚ฌํ•˜๋Š” ์นธ์ด M(์ง€๋ขฐ)๊ฐ€ ์•„๋‹ˆ๋ฉด ์ง€๋ขฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค
    randomArr[i][j] += randomArr[i][j] !== "m" ? 1 : "";

์˜ˆ์™ธ ์„ค์ •

  • (0,0) ~ (8,8)์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„  ๋ถ€๋ถ„์€ ๊ฒ€์‚ฌ์—์„œ ์ œ์™ธ ํ•œ๋‹ค.
    i < 0 || j < 0 || i >= setRow || j >= setColumn ||
  • ๊ฒ€์‚ฌ ์ฃผ์ฒด๊ฐ€ ๋˜๋Š” ์นธ๋„ ์ œ์™ธ ํ•œ๋‹ค.
    (i === chkRow && j === chekColumn)

์ฃผ๋ณ€ ์ง€๋ขฐ ๊ฐœ์ˆ˜๊ฐ€ 0๊ฐœ์ธ ์นธ ํด๋ฆญ ์‹œ ์ฃผ๋ณ€ ์นธ ์—ฐ์‡„ ์˜คํ”ˆ

ํด๋ฆญ ์‹œ ํ•ด๋‹น ์นธ์„ ์˜คํ”ˆ ํ•˜๋ฉฐ ์ฃผ๋ณ€ ์ง€๋ขฐ ๊ฐœ์ˆ˜๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์šฐํด๋ฆญ ์‹œ ์ง€๋ขฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‚จ์€ ์ง€๋ขฐ ๊ฐœ์ˆ˜๋ฅผ ์ค„์—ฌ์ค€๋‹ค.

ํด๋ฆญํ•œ ์นธ์˜ ์ฃผ๋ณ€ ์ง€๋ขฐ ๊ฐœ์ˆ˜๊ฐ€ 0์ผ ๊ฒฝ์šฐ ์ฃผ๋ณ€ 8์นธ์„ ์—ฐ์‡„์ ์œผ๋กœ ์˜คํ”ˆ ํ•œ๋‹ค.

if (isMineCheck !== "true") {
      if (aroundMine !== 0) {
        if (isClicked === "false") {
          if (aroundMine !== "m") { document.getElementById(`${row}-${column}`).innerHTML =
              randomArr[row][column];
            document
              .getElementById(`${row}-${column}`)
              .setAttribute("isclicked", true);
          }
        }
        return;
      } else {
        // ์ฃผ๋ณ€ ์ง€๋ขฐ 0์ผ๋•Œ
        document
          .getElementById(`${row}-${column}`)
          .setAttribute("isclicked", true);
        document
          .getElementById(`${row}-${column}`)
          .classList.add("zeroclicked");
        for (let i = row - 1; i < row + 2; i++) {
          for (let j = column - 1; j < column + 2; j++) {
            if (
              i < 0 ||
              j < 0 ||
              i >= setRow ||
              j >= setColumn ||
              (i === row && j === column) ||
              isClicked === "true"
            ) {
              continue;
            }
            viewBlock(i, j);
          }
        }
      }
    }
  • ์นธ์„ ํด๋ฆญํ•˜๋ฉด ์šฐํด๋ฆญ ํ‘œ์‹œ๊ฐ€ ๋˜์–ด์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
    (์šฐํด๋ฆญ์€ ์ง€๋ขฐ ์ œ๊ฑฐ ํ‘œ์‹œ ์ด๋ฏ€๋กœ ๊ฒ€์‚ฌ์—์„œ ์ œ์™ธ)
    if (isMineCheck !== "true")
  • ์ฃผ๋ณ€์— ์ง€๋ขฐ๊ฐ€ ์žˆ๊ณ ,
    if (aroundMine !== 0)
  • ์ด๋ฏธ ์˜คํ”ˆ๋˜์—ˆ๋˜ ์นธ์ด ์•„๋‹ˆ๊ณ ,
    if (isClicked === "false")
  • ํ•ด๋‹น ์นธ์ด ์ง€๋ขฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ฃผ๋ณ€ ์ง€๋ขฐ ๊ฐœ์ˆ˜๋ฅผ ํ‘œ์‹œํ•ด ์ค€๋‹ค.
    if (aroundMine !== "m")
  • ์ฃผ๋ณ€์— ์ง€๋ขฐ๊ฐ€ ์—†์œผ๋ฉด ์ฃผ๋ณ€ 8์นธ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ๊ทธ ์นธ์˜ ์ฃผ๋ณ€์ง€๋ขฐ๊ฐ€ ์—†์œผ๋ฉด
    ๋˜ ์ฃผ๋ณ€ 8์นธ์„ ๊ฒ€์‚ฌํ•œ๋‹ค. (์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐ)
      if (aroundMine !== 0){
        ...
      } else {
        for (let i = row - 1; i < row + 2; i++) {
          for (let j = column - 1; j < column + 2; j++) {
            if (
              i < 0 ||
              j < 0 ||
              i >= setRow ||
              j >= setColumn ||
              (i === row && j === column) ||
              isClicked === "true"
            ) {
              continue;
            }
            viewBlock(i, j);
          }
        }
}

์ฝ”๋“œ ๋ฐ ๊ฒŒ์ž„์ฒดํ—˜์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•ด ์ฃผ์„ธ์š”.

์ง€๋ขฐ์ฐพ๊ธฐ ๊ฒŒ์ž„ ํ•˜๊ธฐ
์ฝ”๋“œ๋ณด๊ธฐ (github)

profile
์™œ?๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•˜๊ธฐ, ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒฝํ—˜ํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ ์ค‘์š”ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ด ์–ด๋–ค ๋ฐฐ๊ฒฝ๊ณผ ์ด์œ ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฑด์ง€, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ์—๋„ ์ด๊ฒŒ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ธ์ง€๋ฅผ ๋Š์ž„์—†์ด ์งˆ๋ฌธํ•˜๊ณ  ๊ณ ๋ฏผํ•˜์ž. ์ด ๊ณผ์ •์€ ์•ž์œผ๋กœ ๊ฐœ๋ฐœ์ž๋กœ ์ปค๋ฆฌ์–ด๋ฅผ ์Œ“์•„ ๋‚˜๊ฐˆ ๋•Œ ์ค‘์š”ํ•œ ๋ฐœํŒ์ด ๋  ๊ฒƒ์ด๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด