Как мне создать 2D массив массивов? - PullRequest
0 голосов
/ 03 июня 2018

Я работаю над этим заданием, где мне нужно создать версию «Игры жизни».У меня возникают проблемы с правильной настройкой 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' неопределенным.Я уверен, что упускаю что-то очевидное, но я не могу понять, что это такое.Буду очень признателен за любую помощь, которую вы могли бы оказать.

1 Ответ

0 голосов
/ 03 июня 2018

Вы не можете использовать 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);
  }
}
...