我将直奔主题。.因此,我创建了一个多维数组,并且具有如下所示:
var arr = [];
for (var i = 0; i < 10; i++) {
var sArr = [];
for (var a = 0; a < 10; a++) {
cell = Object.create(cellObj)
sArr.push(cell);
}
arr.push(sArr);
}
关于cellObj,我是这样创建的:
var cellObj = {
state: 0,
img: ""
};
现在我已完成所有设置,我将在多维数组中生成两个图像,如下所示:
//the array imgs contain two images
for (var l = 0; l < imgs.length; l++) {
var x = Math.floor(Math.random() * arr.length);
var y = Math.floor(Math.random() * arr[x].length);
//here is a test to make sure that the two images are in two separate cells
if (arr[x][y].state === 0) {
arr[x][y].state = 3;
arr[x][y].img = imgs[l];
}
else
{
l--;
}
}
两个图像可以位于同一行或同一列中,并且它们之间有一个空白单元格,但我不希望它们在水平或垂直方向上并排放置。
我希望所有人都过得愉快,谢谢。
答案 0 :(得分:0)
实现您要寻找的内容的最简单方法是预先消除这些选择。在下面的方法中,我将创建一个包含所有位置的平面数组(为清楚起见,我将arr
重命名为arrayOfImages
)并将其命名为coordLookup
。放置图像后,垂直和水平位置旁边的位置将从filter语句中的coordLookup
中删除。我已经增加了测试图像的数量,以表明它保持了该间距-请注意,如果您尝试放置的图像数量超出了数组可容纳的空间,它将开始失败,因此请确保为这种情况。
(要查看运行情况,请打开控制台并运行代码段,它应将完整的数组显示为表格。)
var cellObj = {
state: 0,
img: ""
};
var arrayOfImages = [];
for (var i = 0; i < 10; i++) {
var sArr = [];
for (var a = 0; a < 10; a++) {
cell = Object.create(cellObj)
sArr.push(cell);
}
arrayOfImages.push(sArr);
}
var coordLookup = [], i = 10, j = 10 //create coordinate lookup
while(--i > -1){
j = 10
while(--j > -1){
coordLookup.push([i,j])
}
}
var imgs = ['image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg']
for (var l = 0; l < imgs.length; l++) {
let pairIndex = Math.floor(Math.random() * coordLookup.length),
pair = coordLookup[pairIndex],
x = pair[0], y = pair[1]
//insert image
arrayOfImages[x][y].state = 3;
arrayOfImages[x][y].img = imgs[l]
//disable horizontal and vertical neighbor cells
const prevX = x - 1, nextX = x + 1, prevY = y - 1, nextY = y + 1
coordLookup = coordLookup.filter(coordpair => {
const _x = coordpair[0], _y = coordpair[1],
isMatch = (_y == y && _x >= prevX && _x <= nextX) || (_x == x && _y >= prevY && _y <= nextY)
return !isMatch
})
}
//display results
console.table(arrayOfImages.map(row => row.map(cell => JSON.stringify(cell))))