我试图创建一组带有随机数的块,但我希望每个数字至少出现两次。也就是说,每个数字都有一对。我怎样才能实现呢?代码我每次创建一个块时都会创建一个随机数。
<script type="text/javascript">
function board(col, row) {
if(col*row%2!=0){
alert("You can't create a game.Give an even number of dimensions")
}
else {
for (var i = 0; i < col; i++) {
newDiv = document.createElement("div");
divCol = "col"+i+" col-format";
newDiv.className = divCol ;
document.getElementsByTagName('body')[0].appendChild(newDiv);
for (var j = 0; j < row; j++) {
newDiv = document.createElement("div");
newDiv.className = "boxed";
newHeadingTxt=document.createTextNode(Math.floor((Math.random()*col)+1));
newDiv.appendChild(newHeadingTxt);
newDiv.onclick = function() {clicked(this)};
document.getElementsByClassName(divCol)[0].appendChild(newDiv);
}
}
}
};
</script>
<style type="text/css">
.col-format {
float:left;
}
.boxed {
width: 10px;
padding: 10px;
margin:1px;
border:10px orange;
background-color: orange;
border-style:outset;
}
</style>
答案 0 :(得分:3)
在你的double for循环中,选择此数组中位置(i * col)+ j
的值//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]
function shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
function createDoubles(col, row) {
var arr1 = [];
// full arr1 with random values
for (var x = 0 ; x < (col * row) / 2; x++) {
arr1.push(Math.round(Math.random() * 10));
}
// copy arr1, concat and shuffle
return shuffle(arr1.slice(0).concat(arr1));
}
function board(col, row) {
if (col * row % 2 != 0){
alert("You can't create a game.Give an even number of dimensions")
} else {
var randomValues = createDoubles(col, row);
for (var i = 0; i < col; i++) {
var newDiv = document.createElement("div");
var divCol = "col" + i + " col-format";
newDiv.className = divCol ;
document.getElementsByTagName('body')[0].appendChild(newDiv);
for (var j = 0; j < row; j++) {
newDiv = document.createElement("div");
newDiv.className = "boxed";
newHeadingTxt=document.createTextNode(randomValues[i*col + j]);
newDiv.appendChild(newHeadingTxt);
newDiv.onclick = function() {clicked(this)};
document.getElementsByClassName(divCol)[0].appendChild(newDiv);
}
}
} };
答案 1 :(得分:0)
最简单的方法是创建一组数字及其对
[1,1,5,5,4,4,3,3,...]
然后洗牌
[1,3,4,3,5,1,5,4,...]
并迭代分配给每个div。
答案 2 :(得分:0)
我假设您正在制作某种记忆匹配游戏?
我会生成一组(row * col / 2)
个随机数,并将每个数字加到一个数组中两次,然后随机排序。
然后,当您循环生成块时,只需从数组中选择并删除第一个数字。