处理:如何为我的2D数组以不同颜色绘制的方块着色?

时间:2017-05-21 19:46:56

标签: arrays 2d processing 2d-games

我正在尝试使用2D阵列制作炸弹人的游戏板。 (最终版本将具有颜色或位图以及每种块类型的属性,并将定义玩家拥有的行走空间。)

我希望这个由11行11列组成的游戏板在游戏中为每种块类型提供不同颜色的方块。 ( j 是一个实体块,是行走空间而 k 是一个可破坏的块,正如你将在数组中看到的那样)

我已经设法绘制了阵列/电路板,但现在我需要对它进行着色。

我试图以某种方式为一种块类型着色,但它只是为整个板着色。

这是我现在的代码:

//Amnt of Columns & Rows
int cols = 11;
int rows = 11;

//Block types
int i;
int j;
int k;


void setup() {
  size(440, 440);


//Game Board
  int [][] field =  { 
    {j, j, j, j, j, j, j, j, j, j, j}, 
    {j, i, i, i, i, k, i, i, i, i, j}, 
    {j, i, j, i, j, i, j, i, j, k, j}, 
    {j, k, k, i, i, i, i, i, i, i, j}, 
    {j, i, j, i, j, k, j, i, j, i, j}, 
    {j, i, i, i, i, k, i, i, i, i, j}, 
    {j, k, j, k, j, i, j, k, j, i, j}, 
    {j, i, k, i, i, i, i, i, i, i, j}, 
    {j, i, j, i, j, k, j, i, j, i, j}, 
    {j, i, i, i, i, k, i, i, i, k, j}, 
    {j, j, j, j, j, j, j, j, j, j, j}  };


  // Draw Board
  for ( i = 0; i < cols; i+=1) {
    for ( j = 0; j < rows; j+=1) {

      if(field[i][j]==1)

      if(field[i][j]==i){
        fill(0);}

        if(field[i][j]==k){
        fill(200,0,0);} else
        if(field[i][j]==j){
        fill(0,200,0);}

      rect(i * 40, j * 40, 40, 40);


    }
  }
}

这是我的结果:

As you can see it's all red (and not only the k blocks)

1 个答案:

答案 0 :(得分:0)

ijk变量存储在草图顶部,然后将它们用作循环并不是很有意义变量。你在这些if陈述中究竟有什么比较?请养成debugging你的程序的习惯,这样你才能准确理解它正在做什么。

但基本上,你应该使用两组不同的变量,你应该将它们命名为更有意义的东西。像这样的东西:

int spaceType = 0;
int blockType = 1;
int bombType = 2;

然后在for循环中,您可能希望使用不同的变量,这些变量同样具有更多描述性名称:

for (int cellX = 0; cellY < cols; cellX++) {
   for (int cellY = 0; cellY < rows; cellY++) {

最后,您的if语句需要检查单元格是否为特定类型。请注意,您当前的if语句没有多大意义:

if(field[i][j]==1)
  if(field[i][j]==i){
    fill(0);
  }

首先检查单元格是否为1,然后检查它是否等于i,这是一个循环变量。

另外,请养成在每个{}语句和if循环周围使用适当的缩进和大括号for的习惯。我猜你上面想要两个单独的if语句,但由于它没有大括号,所以不是它的工作方式。再次,使用调试器(或者甚至只添加println()语句来逐步执行此操作将有助于您了解很多这些内容。