使用随机函数创建偶数个文本

时间:2014-05-03 22:14:43

标签: javascript random

我试图创建一组带有随机数的块,但我希望每个数字至少出现两次。也就是说,每个数字都有一对。我怎样才能实现呢?代码我每次创建一个块时都会创建一个随机数。

 <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>

3 个答案:

答案 0 :(得分:3)

  1. 创建一个长度为块数的一半的数组。
  2. 使用随机数填充该数组
  3. 复制该数组
  4. 连接两个数组并使用值
  5. 在你的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)个随机数,并将每个数字加到一个数组中两次,然后随机排序。

然后,当您循环生成块时,只需从数组中选择并删除第一个数字。