使用矩阵在mouseX,mouseY附近查找索引

时间:2017-09-08 12:14:24

标签: java matrix processing

我正在创造一种基于生死游戏的游戏。该项目的目标是当细胞变白时它们将与附近的其他细胞一起繁殖,当它们变黑时它们会随机死亡。我要实现的游戏的这一部分,并根据单元格的状态(lifedeath)运行。

目前,当细胞是白色并且按下鼠标时,细胞将变为白色并保持白色,直到鼠标未被点击并再次点击。当它们是黑色时,如果鼠标悬停在它们上面,它们将被删除。不幸的是,这也从我用来跟踪当前单元格的矩阵中删除了数组值。如何在不获取数组索引超出范围错误的情况下使用矩阵?我已经尝试添加第二个if语句来搜索附近的单元格,但即使没有绘制单元格也会搜索。我在这里包括整个代码,因为我不想排除任何部分。作为参考,我使用Processing 3 for Java。

int value = 0;

int cols, rows;
int scl = 20;
boolean[][] matrix = new boolean[scl+1][scl+1];
boolean life;
boolean death;

void setup() {
  frameRate(25);
  size(400, 400);
  int w = 400;
  int h = 400;
  cols = w / scl;
  rows = h / scl;
}

void draw() {
  background(255);
  for (int x = 0; x < cols; x++) {
    for (int y = 0; y < rows; y++) {
      int xpos = x*scl;
      int ypos = y*scl;

      //cell border color
      stroke(55);
      if ((mouseX >= xpos && mouseX <= xpos+scl) &&
        (mouseY >= ypos && mouseY <= ypos+scl)) {
        if (mousePressed == true) {
          //println("Clicked at: " + xpos + " and " + ypos);
          if (!matrix[xpos/scl][ypos/scl]) {
            matrix[xpos/scl][ypos/scl] = true;

          if (life){
            matrix[xpos/scl][ypos/scl] = true;
            println("Living at " + xpos + " and " + ypos);
          }
          if (death){
            matrix[xpos/scl][ypos/scl] = false;
            println("Dying at " + xpos + " and " + ypos);
          }

          } else {
            matrix[xpos/scl][ypos/scl] = false;
          }
          //fill(100);
          fill(value);
        }
        //println("Mouse at: " + xpos + " and " + ypos);
      } else {
        fill(50);
      }
      if (matrix[x][y]) {
        fill(value);
      }
      rect(xpos, ypos, scl, scl);
    }
  }
}

void mousePressed() {
  if (value == 0) {
    life = true;
    death = false;
    value = 245;
  } else {
    life = false;
    death = true;
    value = 0;
  }
}

0 个答案:

没有答案