战舰错误JavaScript

时间:2018-05-08 15:16:38

标签: javascript

我目前正在使用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); 

在代码的最后一部分,我调用的函数检查是否可以在该位置插入一条船。它需要标签,暗板,这是板的尺寸,例如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;
      }
    }
  }
}

我真的很感谢你的帮助,谢谢你。

1 个答案:

答案 0 :(得分:0)

我没有调试你的代码,但这听起来像索引与计数问题。当你有四个项目然后循环它们时,索引为0,1,2,3,项目1,2,3和&amp; 4.你最有可能尝试引用项目nbr 4,但它将在索引3(第4个索引)。索引4处没有任何内容(未定义)。尝试在i = 1而不是i = 0或更好的情况下启动循环,然后将项目设置为零而不是1。