2014-03-30 20 views
0

我有一个3x4的图像表,当页面加载所有单独的图像加载,以便使“一个图像”(图像拼凑在一起创造一些难题)加载。我有一个称为自动化的按钮,点击时会随机化图像。我需要的是一个函数来“检查”以查看数字是否已被使用(希望代码有助于理解这一点)。随机生成的数字 - “检查”功能

JS以随机图片:

function auto(){ 
    for (i = 0; i <= 12; i++){ 
    r=Math.floor(Math.random()*12); 
    alert(r) // Just shows where I'm at for figuring it out 
    document.images[i].src="pic"+r+".gif" 
} 

我的图片被称为 “PIC0,PIC1” 等,所以在随机化数0-12将随机图像源。

我现在需要的是一个函数,它将遍历图像0-11,并检查是否已经使用了一个数字以避免重复图片。这是我迄今为止的功能,但现在卡住了。

JS的检查:

for (i=0; i < 12; i++){ 
check[i]=0; 
} 

if (check[r] === 0) 
{ 
    document.images[i].src = "pic" + r + ".gif"; 
    check[r] = 1; 
} 
else { 
    while (check[r] ===0){ 
     r= (r+1) % 12; 
     document.images[i].src = "pic" + r + ".gif"; 
     check[r] = 1; 
    } 

回答

2

你想要的是一个加扰功能。

scramble = function(x) { 
    var y = []; 
    while(x.length > 0) y.push(x.splice(Math.floor(Math.random() * x.length), 1)[0]); 
    return y; 
} 
scramble([1,2,3,4,5,6]) 
// [2, 4, 3, 5, 1, 6] 

在上面的代码中,我们不断从x拾取随机索引,然后除去它,并将它附加到阵列y。这样,x最终将是空的,并且y将是x的混杂版本。

+0

那是非常漂亮,我可能会建议的唯一事情就是递归,而X === Y,看到它不会有太大的否则就是一个“谜题”。 – Victory

1

您不需要检查数字是否已被使用。相反,填充数组瓦特/数字1 - n和洗牌他们:

// using the suffle function here: 
// http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array 

var imgIndices = []; 
for (i=0; i < 12; i++) 
    imgIndices.push(i); 
imgIndices = shuffle(imgIndices); 

for (var imgNum=0; imgNum < imgIndices.length; imgNum++) 
    picName="pic"+imgIndices[ imgNum ]+".gif"