Java随机颜色到块

时间:2016-02-26 13:10:56

标签: java random breakout

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

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

2 个答案:

答案 0 :(得分: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);

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

一些可能的重构:

不能使用i的硬编码值,...在代码中更具动态性:

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实例。

答案 1 :(得分: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在他的回答中所建议的那样。