지뢰 심기
document.querySelector("#exec").addEventListener('click',function(){
//가로,세로,지뢰 갯수 파악
var hot = parseInt(document.querySelector("#hot").value);//가로
var ver = parseInt(document.querySelector("#ver").value);//세로
var mine = parseInt(document.querySelector("#mine").value);
console.log(hot,ver,mine);
//후보군 : js로 [x,y] 사이 랜덤한 수 생성할 때 for문 안 쓰고 하기 좋으니 외워두기를.
//지뢰 위치 뽑기 1~100이 아니라 0~99
var 후보군 = Array(hot * ver)//가로 X 세로 = 칸의 갯수. 만큼 배열 만든다.
.fill()//빈 배열을 undefiend로 채운다.
.map(function(요소,인덱스) {//1:1로 매핑.
return 인덱스 + 1;
});
var 셔플 = [];
while(후보군.length > 80) {//1부터 100까지 배열 생성=>20개만 생성
var 이동값 = 후보군.splice(Math.floor(Math.random() * 후보군.length),1)[0];
셔플.push(이동값);
}
//데이터와 화면을 따로 생각하되 둘을 일치시키는 작업이 필요. 여기서는 2차원 배열을 먼저 만들고 그것을 화면에 옮기는 작업 순서로 한다.
//지뢰테이블 만들기
var dataset = [];
var tbody = document.querySelector('#table tbody');
//세로줄(tr)을 먼저 만들고 가로칸(td)를 넣는다.
for(var i = 0; i < ver; i+=1) {
var arr = [];
dataset.push(arr);
// var tr = document.createElement('tr');
for(var j = 0; j < ver; j+=1) {
arr.push(1);
var td = document.createElement('td');
tr.appendChild(td);
//td.textContent = 1;모든 칸에 1 입력
}
tbody.appendChild(tr);
}
console.appendChild(tr);
//지뢰 심기
for(var k = 0; k < 셔플.length; k++) {//예 60 -> 7번째줄 0번째칸.인덱스 잘 맞춰줘야함.
var 세로 = Math.floor(셔플[k] / 10) ;
var 가로 = 셔플[k] % 10;//배열엔 -1이 나오면 안됨
console.log(세로,가로);
tbody.children[세로].children[가로].textContent = 'X';
dataset[세로][가로] = 'X';
//tbody 하위에는 tr들이 유사 객체처럼 있다.
}
});
// tbody tr td는 화면 부분.
// 입력받은 hot, ver 값에 따라 동적으로 tr,td 생성!
//피셔예이츠 셔플로 지뢰를 심을 20개 위치를 뽑는다.
//지뢰 랜덤 숫자 나오면 59->6번째줄 9번째칸, 72->8번째줄 2번째 칸 이런 식으로 바꿔줘야한다. 규칙찾기.
Last updated