在《JavaScript 基础教程(第6版)》第三章中有一个Bingo卡片的示例程序。
规则:在 5*5 的矩形格子中,每格都存有一个随机整数,第1列数值取1-15,第2列数值取16-30,其后的列依此类推,要求所取的随机数值是没有重复所取过的。而在矩形格子中有一个空的格子,不存数值。
HTML代码如下:
CSS代码如下:
JavaScript 代码如下:
window.onload = init;
//定义存放随机整数的容器
var usedNums = [];
usedNums.length = 15;
var getIdName = function(idName) {
if(!document.getElementById) return;
this.elem = document.getElementById(idName);
return this.elem;
}
function init() {
elem = getIdName('reload');
if(!elem) return;
elem.onclick = anotherCard;
newCard();
};
function newCard() {
for(var i=0; i<24; i++) {
setSquare(i);
}
}
function setSquare(thisSquare) {
var currSquare = 'square' + thisSquare;
var colPlace = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4];
var colBasis = colPlace[thisSquare] * 15;
var newNum;
do {
newNum = colBasis + getNewNum() + 1;
}
while(usedNums[newNum])
usedNums[newNum] = true;
elem = getIdName(currSquare);
elem.innerHTML = newNum;
}
function getNewNum() {
//值在1与15间的随机数
var r = Math.floor(Math.random() *15);
//将该值返回
return r;
}
function anotherCard() {
for(i=1; i<usedNums.length; i++) {
usedNums[i] = false;
}
newCard();
return false;
}
//定义存放随机整数的容器
var usedNums = [];
usedNums.length = 15;
var getIdName = function(idName) {
if(!document.getElementById) return;
this.elem = document.getElementById(idName);
return this.elem;
}
function init() {
elem = getIdName('reload');
if(!elem) return;
elem.onclick = anotherCard;
newCard();
};
function newCard() {
for(var i=0; i<24; i++) {
setSquare(i);
}
}
function setSquare(thisSquare) {
var currSquare = 'square' + thisSquare;
var colPlace = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4];
var colBasis = colPlace[thisSquare] * 15;
var newNum;
do {
newNum = colBasis + getNewNum() + 1;
}
while(usedNums[newNum])
usedNums[newNum] = true;
elem = getIdName(currSquare);
elem.innerHTML = newNum;
}
function getNewNum() {
//值在1与15间的随机数
var r = Math.floor(Math.random() *15);
//将该值返回
return r;
}
function anotherCard() {
for(i=1; i<usedNums.length; i++) {
usedNums[i] = false;
}
newCard();
return false;
}
上面的程序随机算法思路:
每列的随机整数是每次取一个值,将该值放在容器里,前提是在容器中没有同样的值。这样,取的随机值既不会重复,又保证了足够的随机。是个非常巧妙的算法。
那么,我们想要红色的方格在5*5的矩形方格中随机的显示出来,将HTML代码修改如下:
JavaScript代码如下:
}
我们将处理的数据不显示在内容层上,也就是说隐藏在行为层了。那么,随便取一个1到25间的整数值,这里我们取的是数值 2。将它显示的元素 id 设为 'free'。它便有了特定的样式。
呵呵。经典的“贪吃蛇”游戏中蛋的随机算法不就是这样的嘛?