如何创建2D数组阵列?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建2D数组阵列?相关的知识,希望对你有一定的参考价值。

我正在完成这项任务,我需要构建一个版本的生命游戏。我无法正确设置这个2D阵列,以便我可以跟踪细胞是“活着”还是“死亡”。我好像已经撞墙了,我需要有人让我朝着正确的方向前进。

var grid;

function setup () {
 createCanvas(400, 400);
 grid = new Grid(20);
}

function draw () {
 background(245);

   grid.draw();
}

class Grid {
  constructor (cellSize) {
   this.cellSize = cellSize;
   this.numberOfColumns = height/this.cellSize;
   this.numberOfRows = width/this.cellSize;

   this.cells = new Array(this.numberOfColumns);
   this.rows = new Array(this.numberOfRows);
   this.twoDArray = new Array(this.cells);

  for (var i = 0; i < this.cells; i++) {
   this.twoDArray[i] = new Array(this.rows);
  }


 // for (var column = 0; column < this.numberOfColumns; column ++) {
  // for (var row = 0; row < this.numberOfRows; row++) {
   // this.cells[column][row] = new Cell(column, row, cellSize);
  //}
  // }

 print(this.cells);
}

draw() {
 for (var column = 0; column < this.numberOfColumns; column ++) {
   for (var row = 0; row < this.numberOfRows; row++) {
     fill(240); 
     noStroke();
     rect(column * this.cellSize + 1, row * this.cellSize + 1, this.cellSize - 1, this.cellSize - 1);
    }
  }
 }
}
   class Cell {
    contructor (column, row, cellSize) {
     this.column = column;
     this.row = row;
     this.cellSize = cellSize;
     isAlive = false;
    }
  }

每当我尝试取消注释我上面评论的代码时,控制台会说:TypeError:无法设置'0'的属性未定义。我确定我错过了一些明显的东西,但我似乎无法看到它是什么。您将给予的任何帮助将不胜感激。

答案

你不能使用this.cells作为多维数组,因为它按照new Array填充了空元素。

您应该将代码更改为:

for (var column = 0; column < this.numberOfColumns; column ++) {
  this.cells[column] = []; // or use here new Array or similar
  for (var row = 0; row < this.numberOfRows; row++) {
    this.cells[column][row] = new Cell(column, row, cellSize);
  }
}

以上是关于如何创建2D数组阵列?的主要内容,如果未能解决你的问题,请参考以下文章

将 2D 纹理阵列的单层从 GPU 复制到 CPU

c中的2d动态int数组

将蒙版阵列 2d 应用到 3d

2d 阵列 gamemaker2 工作室

水平堆栈2d Numpy阵列与3d Numpy阵列

基于像素的标签将2D像素阵列更改为图像