Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在二维网格中随机填充固定数量的单元格_Javascript_Arrays_If Statement_For Loop - Fatal编程技术网

Javascript 在二维网格中随机填充固定数量的单元格

Javascript 在二维网格中随机填充固定数量的单元格,javascript,arrays,if-statement,for-loop,Javascript,Arrays,If Statement,For Loop,我正在尝试制作JavaScript扫雷器,我想我在推弹功能方面遇到了一些问题。我试着把炸弹排成一排,有时会放上确切的数字,但有时会放得更少 我的问题是: 当条件为true时,它将炸弹放入数组中,但当条件为false时,它将通过此ITA或在数组中查找另一个为true的索引 random()在条件和代码块中返回不同的值 它把炸弹放在原来的地方,但为什么呢 var网格={ _网格:[], createGrid:函数(c){ 对于(变量i=0;i

我正在尝试制作JavaScript扫雷器,我想我在推弹功能方面遇到了一些问题。我试着把炸弹排成一排,有时会放上确切的数字,但有时会放得更少

我的问题是:

  • 当条件为true时,它将炸弹放入数组中,但当条件为false时,它将通过此ITA或在数组中查找另一个为true的索引
  • random()在条件和代码块中返回不同的值
  • 它把炸弹放在原来的地方,但为什么呢
  • var网格={
    _网格:[],
    createGrid:函数(c){
    对于(变量i=0;i
    每次调用Math.random()都会得到一个不同的值。假设在编写代码的过程中,您希望在检查和赋值中查看同一个插槽,则只希望对网格的每个轴调用该插槽一次。下面,我将它们称为xx和yy

    pushBombs: function (b) {
       for (var i = 0; i < b; i++) {
          var xx = Math.round(Math.random() * (this._grid.length - 1));
          var yy = Math.round(Math.random() * (this._grid.length - 1)); 
          if (this._grid[xx][yy] == 'Empty') {
            this._grid[xx][yy] = 'Bomb';
          }
       }
    }
    
    编辑2 如果您想确保始终获得准确的炸弹数量,应使用@PierreDuc建议的while循环:

        while(b > 0) {
          var xx = Math.round(Math.random() * (this._grid.length - 1));
          var yy = Math.round(Math.random() * (this._grid[0].length - 1)); 
          if (this._grid[xx][yy] == 'Empty') {
            this._grid[xx][yy] = 'Bomb';
            b--;
          }
        }
    

    请注意,如果b的值大于空插槽的数量,这将变成一个无限循环。

    检查空插槽的单元格不一定是设置为bomb的单元格,因为您再次调用random,而不是将x、y保存为坐标并访问相同的位置。这是qu的一个主要问题估计你的标题没有解释你实际遇到的问题;你问了太多问题,却没有提到你遇到问题的编程结构。这样想想,你会在谷歌上搜索“需要JavaScript帮助”吗希望找到问题的解决方案吗?如果没有,你应该将你的标题改为你在谷歌上搜索的内容,以找到问题的答案。是的,这意味着你要在问题的表述上投入更多的精力,但这正是将堆栈溢出与单纯的论坛区分开来的原因。这也行不通。因为它有可能会我没有给出适当数量的炸弹。最好在
    中使用
    循环,如果炸弹是空的
    语句,递增:)@PierreDuc-很好的捕获。我更新了它。我也在考虑无限循环,但我看到你已经赶上了。很好的一个谢谢很多人,它正在工作。别忘了标记这个作为“答案”,如果它解决了您的问题:-)
    
        while(b > 0) {
          var xx = Math.round(Math.random() * (this._grid.length - 1));
          var yy = Math.round(Math.random() * (this._grid[0].length - 1)); 
          if (this._grid[xx][yy] == 'Empty') {
            this._grid[xx][yy] = 'Bomb';
            b--;
          }
        }