我想要从矩阵的顶部到底部生成一条随机路径。
FIDDLE
要求:
- 路径可以蜿蜒曲折,但必须连接第1行和最后一行。 - 最终,我希望每个路径片段的颜色都是随机的,但现在可以是统一的(我在下面测试了红色)。 - 从上到下连接的路径是随机生成的。 - 路径片段显然必须连接,并且不应分叉(即,不应该给玩家两个选择的选项,如此处所示)。 - 路径只能从上到下移动(不能向上移动),但可以左右蜿蜒。
在左边是空的网格,在右边是它应该生成的内容。
到目前为止,它添加了初始步骤,然后是下面的行,但是就停止了。
- 路径可以蜿蜒曲折,但必须连接第1行和最后一行。 - 最终,我希望每个路径片段的颜色都是随机的,但现在可以是统一的(我在下面测试了红色)。 - 从上到下连接的路径是随机生成的。 - 路径片段显然必须连接,并且不应分叉(即,不应该给玩家两个选择的选项,如此处所示)。 - 路径只能从上到下移动(不能向上移动),但可以左右蜿蜒。
我所考虑的:
- 我不能简单地检查上一行的列是否是路径的一部分,因为这样它会在找到第一个真值时不断生成路径片段。
- 我不想手动生成路径,因为那需要一个新的矩阵来指定我想要的路径的1和0。而且对于每个“随机”的路径选项,我都必须建立一个新的矩阵。更重要的是,在矩阵中手动生成路径将使矩阵大小的扩展变得更加繁琐......例如,如果我将我的6x6矩阵改为100x100。
所以,是的,简单的方法就是做这个并迭代它:
var matrixPaths = [
[0,1,0,0,0,0],
[0,1,1,1,0,0],
[0,0,0,1,0,0],
[0,0,0,1,1,1],
[0,0,0,0,0,1],
[0,0,0,0,0,1]
];
在左边是空的网格,在右边是它应该生成的内容。
function createMyGrid() {
//create 6x6 matrix
for(var i=1; i<=6; i++) {
matrix[i] = [];
for(var j=1; j<=6; j++) {
var colorIndex = Math.floor(Math.random() * (color.length - 0) + 0);
var $span = $('<span />').attr('class', 'colorSquare').html("[" + i + "][" + j + "]");
$("#grid").append($span);
matrix[i][j] = $span;
}
}
}
接下来,在第一行随机生成第一个路径片段。然后对于每个后续的行,检查上面是否有路径片段可以连接...然后从那个片段开始生成下一组:
function createPath() {
var randomColumn = Math.floor(Math.random() * (matrix[1].length - 0) + 0);
matrix[1][randomColumn].data('partOfPath', true);
matrix[1][randomColumn].addClass("red");
for (var row = 2; row <= 6; row++) {
for (var col = 1; col <= 6; col++) {
if (matrix[row-1][col].data('partOfPath')) { //if block above is partOfPath... add a set of items of random # of columns across
addRowPath(row, col);
}
}
}
}
function addRowPath (row, pathCol) { //need to start offset from that row/col position,
var randRowPathLength = Math.floor(Math.random() * (matrix[row].length - 0) + 0);
for (var col = pathCol; col <= randRowPathLength; col++) {
matrix[row][col].addClass("red");
}
}
到目前为止,它添加了初始步骤,然后是下面的行,但是就停止了。
console.log()
调用来查看值和路径为什么会结束,或者在代码中设置断点并逐行调试,直到找出问题。这就是调试。 - user1106925