2016-02-26 102 views
1

所以我在Java中编写游戏突破,我已经有了一个砖块数组,但我想给砖块(或砖块)随机颜色。 我有4种不同颜色的可能性;红色,绿色,蓝色,黄色。但是我的代码如下所示,当我重新打开我的窗口和游戏时,我只会看到不同的颜色。 有人可以帮我给随机颜色的块?Java随机颜色到块

public void prepareBlocks() { 
    int spacing = Breakout.BLOCKSPACING_Y; 

    Random rand = new Random(); 
    int n = rand.nextInt(4) + 1; 
    Color colour = new Color(n); 

    if (n==1){ 
     colour = Color.red; 
    } if (n==2){ 
     colour = Color.yellow; 
    } if (n==3){ 
     colour = Color.green; 
    } if (n==4){ 
     colour = Color.blue; 
    } 

    lines[0] = new Line(0, colour); 
    lines[1] = new Line(BLOCKHEIGHT+spacing, colour); 
    lines[2] = new Line(BLOCKHEIGHT*2+2*spacing, colour); 
    lines[3] = new Line(BLOCKHEIGHT*3+3*spacing, colour); 
    lines[4] = new Line(BLOCKHEIGHT*4+4*spacing, colour); 
    lines[5] = new Line(BLOCKHEIGHT*5+5*spacing, colour); 

    for(int i = 0; i<lines.length; i++) { 
     blockCount += lines[i].numberblocks; 
     lines[i].fill(); 
    } 
} 
+0

在你的应用程序的什么时候,你想提供颜色? – Berger

+2

如果仅在重新打开窗口时更新颜色,则可能需要在更改颜色后重新绘制面板。 – StepTNT

回答

1

假设您希望每行都具有相同的颜色,您只需在应用新行之前插入随机数即可。一些代码清洁后,这将是这样的:

public void prepareBlocks() { 
    int spacing = Breakout.BLOCKSPACING_Y; 

    Random rand = new Random(); 

    Color colour; 
    for(int i=0; i<lines.length; i++){ 
     switch(rand.nextInt(4) + 1){ 
      case 1: colour = Color.red; break; 
      case 2: colour = Color.yellow; break; 
      case 3: colour = Color.green; break; 
      case 4: colour = Color.blue; break; 
      default: colour = new Color(n); 
     } 
     lines[i] = new Line(BLOCKHEIGHT*i+i*spacing, colour); 
     blockCount += lines[i].numberblocks; 
     lines[i].fill(); 
    } 
} 

编辑虽然更漂亮的代码,你应该保存颜色的数组(比我的开关更安全),如Stultuske在他的回答提出。

3
Random rand = new Random(); 
int n = rand.nextInt(4) + 1; 
Color colour = new Color(n); 

if (n==1){ 
    colour = Color.red; 
} if (n==2){ 
    colour = Color.yellow; 
} if (n==3){ 
    colour = Color.green; 
} if (n==4){ 
    colour = Color.blue; 
} 

lines[0] = new Line(0, colour); 
lines[1] = new Line(BLOCKHEIGHT+spacing, colour); 
lines[2] = new Line(BLOCKHEIGHT*2+2*spacing, colour); 
lines[3] = new Line(BLOCKHEIGHT*3+3*spacing, colour); 
lines[4] = new Line(BLOCKHEIGHT*4+4*spacing, colour); 
lines[5] = new Line(BLOCKHEIGHT*5+5*spacing, colour); 

无论你在这里做什么,你所有的块都会得到相同的颜色。

几个可能的重构:

不要用硬编码值工作了我......在你的代码更动态:

private int getRandomIndex(){ 
    Random rand = new Random(); 
    return rand.nextInt(colors.length); // no need for + 
} 

private Color[] colors = {Color.red, Color.yellow, Color.green, Color.blue}; 

这样,你不需要添加一个if ...每当你想添加一个颜色时,只需将它添加到数组中即可。更不用说,它缩短了代码。 但是,您需要弄清楚如何正确添加Blockheight等。

// .... 
    for (int i = 0; i < lines.length; i++){ 
    lines[i] = new Line(BLOCKHEIGHT + " everything else you need here", colors[getRandomIndex()]; 
    } 

现在的问题是,您对所有行都使用相同的Color实例。