Генератор рандомных чисел
Всем привет, решил сделать игру в Сапёра, но столкнулся с проблемой при генераций поля. У меня должно создаётся массив который соддержит число 1 (мина) и 0 (пустая клетка). Но этот никак не хочет работать. Может что помось?
const block = document.querySelector(".sapper");
var bomb = 9, size = 9;
var sapper = new Array(), repeat = 0;
generateSapperArea();
if(repeat < size){
generateSapperArea();
}
function generateSapperArea(){
for(let i = 0; i < size; i ++){
sapper[i] = new Array();
for(let j = 0; j < size; j ++){
let temp = Math.floor(Math.random() * 10);
if(temp == 1) repeat ++;
else temp = 0;
if(repeat > size) temp = 0;
sapper[i][j] = temp;
}
}
return repeat;
}
console.log(sapper);
Как мне сгенерировать массив 9х9 где будут ровно 9 - 1 в рандомных местах?)
Ответы (2 шт):
Автор решения: Проста Miha
→ Ссылка
Я всё сделал, если кому-то интерестно я оставлю код нижу ^-^
var bomb = 9,
size = 9;
var sapper = new Array(),
repeat = 0;
generateSapperArea();
function generateSapperArea() {
while (repeat != 9) {
repeat = 0;
for (let i = 0; i < size; i++) {
sapper[i] = new Array();
for (let j = 0; j < size; j++) {
let temp = Math.floor(Math.random() * 10);
if (temp == 1) repeat++;
if (repeat > size || temp != 1) temp = 0;
sapper[i][j] = temp;
}
}
}
}
console.log(sapper);
Автор решения: Jarry Roxwell
→ Ссылка
Еще вот так можно)
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
function createArea(size) {
return Array(size)
.fill([])
.map(
() => Array(size).fill(0)
);
}
function fillBomb(area, bomb = 1) {
let size = area.length;
while (bomb) {
let ceil = getRandomInt(0, size ** 2),
j = ceil / size | 0,
i = ceil % size;
if (!area[j][i]) {
area[j][i] = 1;
bomb--;
}
}
return area;
}
let area = createArea(9);
area = fillBomb(area, 9);
console.log(area);