2014-12-04 96 views
1

我该如何去修改当前的棋盘棋盘代码,以便棋盘棋子以彩色方式递归交替?为了清楚起见,我不希望每件作品都是纯色 - 我希望它们的颜色本身有不同的颜色。因此,例如,当前的黄色部分会变成黄色和蓝色部分,具有黄色的外层,接着是蓝色,然后是黄色等。我希望这有意义吗?我不相信我可以突出显示代码,但checker片段在checkerBoard方法中的第一个嵌套for语句之后开始。有两种情况,第一种是前两排,第二种是最后两种。Java - 在圈中递归交替颜色

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); 
    } 
} 

回答

2

这是你想要

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); 
    } 
    } 
+1

差不多。我需要递归地执行它,所以我想调用checkerBoard() - 尽管创建一个新方法并调用该方法会更有意义吗?另外你提供的例子是_bit_ off。将它加载到applet中,看起来像3D交通锥,而不是交替出现的圆。也许他们看起来更像是棋子?有趣的,如果有的话。即使你搞砸了,图形总是很有趣:) – user3594736 2014-12-04 01:34:19

+1

哎呀我把我的系数关闭了。我认为这是正确的。 – BevynQ 2014-12-04 01:37:40

+0

所以如果我使用了一种新的方法,就像你在暗示的那样,我应该如何保留原来嵌套的语句,这样才能使圆圈只出现在板的前两个和最后两个行?对不起,如果我是一个小noobish :( - 另外,它看起来像你忘了在你的drawCircle方法中的“图形克”? – user3594736 2014-12-04 01:48:44