【问题标题】:Battleship error JavaScript战舰错误JavaScript
【发布时间】:2018-05-08 15:16:37
【问题描述】:

我目前正在用 Javascript 开发 Battleship 游戏,但是每次运行代码都会出现 Cannot read property '4' of undefined 错误。

我到处寻找答案,但找不到任何答案。我也试过console.log 看看它是什么未定义,我认为这是我的变量选项卡,它是游戏的棋盘,但我找不到解决方案让它不是未定义的。

这是我创建板的代码:

var tab = [];
for (var i=0; i<dim; i++) {
    tab.push([]);
    for(var j=0; j<dim; j++) {
      tab[i].push(0);  
    }    
}

generateships(tab, dim, 1, 4); 
generateships(tab, dim, 2, 3); 
generateships(tab, dim, 3, 2);
generateships(tab, dim, 4, 1); 

在代码的最后一部分,我调用了检查是否可以在该位置插入船的函数。它需要tab,dim,这是板的尺寸,例如10,船的数量,最后是船的长度。

function generateships(tab, dim, numbships, boatlen) {
  for (var i = 0; i < numbships; i++) {
    var empty = false;
    while (!empty) {
      var direction = Math.floor(Math.random() * 2);
      if (direction === 1) {
        var X = Math.floor(Math.random() * (dim - boatlen));
        var Y = Math.floor(Math.random() * dim);
        for (var i = 0; i < dim; i++) {
          if (tab[X][Y + i] == 0) {
            empty = true;
          } else {
            empty = false;
          }
        }
      } else {
        var X = Math.floor(Math.random() * dim);
        var Y = Math.floor(Math.random() * (dim - boatlen));
        for (var k = 0; k < dim; k++) {
          if (tab[X + k][Y] == 0) {
            empty = true;
          } else {
            empty = false;
          }
        }
      }
    }
    shiplocations(numbships, boatlen, direction, X, Y);
  }
}

我调用的最后一个函数是在特定位置插入一艘船的函数。它需要船的数量、船的长度、船的方向和坐标。

function shiplocations(numbships, boatlen, direction, X, Y) {
  for (var k = 0; k < numbships; k++) {
    for (var i = 0; i < boatlen; i++) {
      if (direction === 1) {
        tab[X][Y + i] = boatlen;
      } else if (direction != 1) {
        tab[X + i][Y] = boatlen;
      }
    }
  }
}

非常感谢您的帮助,谢谢。

【问题讨论】:

  • 你的调试器告诉你是哪一行代码导致了错误?
  • 单击错误显示的行号,然后查看.4 之前的标识符。这就是undefined
  • 如果我运行此代码,我会得到 dim is undefined 。你会做一个小提琴吗?
  • @zero298 在函数 generateships 中表示 if (tab[X+k][Y]==0) {
  • 在这种情况下,[X+k] 超出了您的数组范围。

标签: javascript


【解决方案1】:

我还没有调试过你的代码,但这听起来像是一个索引与计数的问题。当您有四个项目并遍历它们时,项目 1、2、3 和 4 的索引为 0、1、2、3。很可能您正在尝试引用项目 nbr 4,但它将位于索引 3 (第四指数)。索引 4 处将没有任何内容(未定义)。尝试从 i = 1 而不是 i = 0 开始循环,或者更好地从零而不是 1 开始你的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    相关资源
    最近更新 更多