2014-12-04 93 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