์ฒ์ 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); } } }