带有处理的二维数组中的颜色形状

Color shapes in 2d array with Processing

我是编程新手,很抱歉提出愚蠢的问题。我搜索了这个网站和其他网站并找到了我的问题,但我无法应用他们的解决方案,因为他们的编程不同。

我有一个 10x10 的网格,我需要为其中的一行或一列着色。我试过在 "for" 中添加 if 语句,但无法在那里定义行和列。我很困惑,如果你能帮助我,我会很高兴,谢谢!

This is the task.

void setup()
{
  size(400,400);
  noStroke();
  fill(180,50, 50, 100);
}

void draw()
{
  background(255);

  for (int row=0; row<10; row = row+1)
  {
    for (int col=0; col<10; col = col+1)
    {
      if(col==4)
      {fill(255,0,0);
       ellipse(20+col*40,20+row*40,30,30);}
      else{
      ellipse(20 + col*40, 20 + row*40,30,30);}
    }
  } 
}   

我强烈建议您养成 debugging your code 的习惯,以便您准确了解您的程序在做什么。

您有一个嵌套的 for 循环,它循环遍历网格中的每个圆。第一次看到 col==4 时,您将填充值设置为红色。但是你永远不会将填充值更改回其原始颜色!

您可能想要为网格中的每个 圆设置填充值。

正如@Kevin Workman 指出的那样,您已经设置了 fill 但忘记将其改回。既然你指出你是初学者,那么把画东西想象成"stateful",这意味着除非并且直到状态再次改变,否则它将保持原样。这适用于笔触、填充、所有颜色、当前坐标等属性。

当您进入更高级的级别时,您可能需要保存和恢复状态,这可以使用矩阵变换来完成。有关状态的非常简短的入门知识,请参阅此 Jenkov tutorial

至于您的代码,将 fill(180,50,50) 添加到 else 块应该可以解决您的问题。

...
  if(col==4){
    fill(255,0,0); //The different color for 4th column
    ellipse(20+col*40,20+row*40,30,30);
  } else{
    fill(180,50,50);  //The default color
    ellipse(20+col*40, 20+row*40,30,30);
  }
...