Java - 递归地交替循环颜色

标签 java recursion graphics geometry

我将如何修改棋盘格的当前代码,以便棋盘棋子的颜色递归地交替?需要明确的是,我不希望每件作品都是纯色的 - 我希望它们本身具有颜色交替的级别。例如,当前的黄色 block 将变为黄色和蓝色 block ,外部为黄色,然后是蓝色,然后是黄色,等等。我希望这有意义吗?我不相信我可以突出显示代码,但检查器片段在 checkerBoard 方法中的第一个嵌套 for 语句之后开始。有2种情况,第一种是顶部2行,第二种是底部2行。

import java.awt.*;
import java.applet.*;

public class Checkerboard extends Applet 
{    
   private final int DIST = 100;
   private final int SIZE = 1000;

   public void checkerBoard(int row, int col, int x, int y, boolean b, Graphics g) 
   {    
      for ( row = 0;  row < 8;  row++ ) 
      {         
         for ( col = 0;  col < 8;  col++) 
         {
            x = col * 100;
            y = row * 100;
            if ( (row % 2) == (col % 2) )
               g.setColor(Color.black);
            else
               g.setColor(Color.red);
            g.fillRect(x, y, 100, 100);
         }
      }

      for ( row = 0;  row < 2;  row++ ) 
      {         
         for ( col = 0;  col < 8;  col++) 
         {
            x = col * 100;
            y = row * 100;
            g.setColor(Color.yellow);
            g.fillOval(x, y, 100, 100);
         }
      }

      for ( row = 7;  row > 5;  row-- ) 
      {         
         for ( col = 0;  col < 8;  col++) 
         {
            x = col * 100;
            y = row * 100;
            g.setColor(Color.green);
            g.fillOval(x, y, 100, 100);
         }
      }
   }

   public void paint(Graphics g)
   {
    checkerBoard(0, 0, 0, 0, true, g);
   }
}

最佳答案

这就是你想要的

for ( row = 0;  row < 2;  row++ ) 
  {         
     for ( col = 0;  col < 8;  col++) 
     {
     for ( int ring = 0;  ring < 5;  ring++) {
        x = col * 100 + (ring * 10);
        y = row * 100 + (ring * 10);
        if((ring & 1) == 0){
          g.setColor(Color.yellow);
        }else{
          g.setColor(Color.blue);
        }
        g.fillOval(x, y, 100-(ring*20), 100-(ring*20));
        }
     }
  }

递归方法就像,

private void drawCircle(int x, int y, int circleSize, int ringSize, Color primary, Color alternate, Graphics g){
    if(circleSize > 0){
        g.setColor(primary);
        g.fillOval(x, y, circleSize,circleSize);
        drawCircle(x+ringSize/2,y+ringSize/2,circleSize-ringSize,ringSize,alternate,primary, g);
    }
}



for ( row = 0;  row < 2;  row++ ) 
  {         
     for ( col = 0;  col < 4;  col++) 
     {
       int y = row * 100;
       int x = ((col * 2) + (col & 1)) * 100; // want to alternate squares
       drawCircle(x, y, 100, 20, Color.Yellow, Color.Blue,g);
     }
  }

关于Java - 递归地交替循环颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27284475/

相关文章:

java - 一个Synchronized Collection Wrapper工厂方法是如何将 "own"对象传入其中的呢?

java - 构建从字符串中提取数据的模式

java - 如何在 Android 中发送短信?

python - 为什么这个递归函数不打印两次?

Java 游戏图像缓冲留尾

java - 使用 Tomcat 进行开发的最佳方式

Java:IOException 的危险自返回递归函数?

python - 如何在tkinter上绘制递归树

c# - 旋转文本以进行打印

user-interface - 无障碍对比度与企业形象指南