本來是要寫一個n*n的宮格,1到n^2 的整數(shù)隨機出現(xiàn)在每個格子里,用戶按從1到n^2的順序依次點擊每個方格,若順序正確,則格子翻轉(zhuǎn)。用戶按完則統(tǒng)計總用時。
大致的思路是這樣:以n=3為例,先生成一個1-9隨機亂序排列的數(shù)組,這樣的話,在生成九宮格時就不必考慮隨機性的問題,只需按順序輸出到表格中就行了。
所以問題就轉(zhuǎn)變?yōu)椋喝绾紊梢粋€固定數(shù)字隨機亂序排列的數(shù)組。
首先,為了方便縷清邏輯,我這里按字母a到i的順序定義了一個初始數(shù)組,定義了一個空數(shù)組用來存儲亂序的字母:
var nums = ["a","b","c","d","e","f","g","h","i"]; //定義初始數(shù)組
var randomNums = new Array(); //定義一個空數(shù)組,用來存儲隨機數(shù)
然后用for循環(huán),每次循環(huán)生成一個0到初始數(shù)組的長度-1的整數(shù),用這個整數(shù)作為下標,去取初始數(shù)組里的值,并把這個值按順序?qū)懭氲教崆皽蕚浜玫目諗?shù)組。并且通過這個下標定位到初始數(shù)組把對應(yīng)的值刪掉,防止下一輪這個值被取到,這樣就解決了隨機數(shù)不重復(fù)的問題。且因為每次循環(huán)是根據(jù)初始數(shù)組的長度-1來隨機取數(shù),所以每一輪都剛好在該數(shù)組中隨機取到一個值。
for (var i = nums.length; i > 0; i--) {
var bridge = Math.floor(Math.random()*nums.length); //給bridge賦值一個0到nums.length-的隨機整數(shù)
randomNums.push(nums[bridge]);
var index = nums.indexOf(nums[bridge]); //根據(jù)bridge定位到初始數(shù)組的某個值,并取到這個值的下標
nums.splice(index,1); //根據(jù)下標把初始數(shù)組的這個值刪掉
}
至此,我們得到一個將a-i隨機排列的數(shù)組randomNums。
在html的body里,我們定義一個空的div用于存放九宮格:
<div id="mainTable">
</div>
然后通過改寫innerHTML的方式,直接把新的數(shù)組randomNums里每個值按順序?qū)懭氲奖砀?,此時可以不必再考慮隨機性問題。
var mainTable = document.getElementById('mainTable');
mainTable.innerHTML = "<table><tr><td>" + randomNums[0] + "</td><td>"+randomNums[1]+"</td><td>"+randomNums[2]+"</td></tr><tr><td>"+randomNums[3]+"</td><td>"+randomNums[4]+"</td><td>"+randomNums[5]+"</td></tr><tr><td>"+randomNums[6]+"</td><td>"+randomNums[7]+"</td><td>"+randomNums[8]+"</td></tr></table>";
得到的結(jié)果如下:

image.png