如何使用在循环外部的for循环内声明的变量?

时间:2016-01-01 18:36:31

标签: java for-loop 2d-games acm-java-libraries

我正在创建ATARI BREAKOUT,使用acm.graphics库并且我试图访问" brick"在我的for循环之外删除它。如果没有for循环,我无法找出任何其他方法来创建砖块。帮助

GRect brick = new GRect(brickwidth, brickheight);
    for(j = 1; j <= nrows; j++) { 
        for(i = 0; i < bricksperrow; i++) {
            brick.setLocation(i*(brickwidth + brickSep) + 1, brickoffset + j*(brickheight + brickSep));
            if(j == 1 || j == 2) {
                brick.setColor(Color.RED);
                brick.setFilled(true);
            }
            else if(j == 3 || j == 4) {
                brick.setColor(Color.ORANGE);
                brick.setFilled(true);
            }
            else if(j == 5 || j == 6) {
                brick.setColor(Color.YELLOW);
                brick.setFilled(true);
            }
            else if(j == 7 || j == 8) {
                brick.setColor(Color.GREEN);
                brick.setFilled(true);
            }
            else if(j == 9 || j == 10) {
                brick.setColor(Color.CYAN);
                brick.setFilled(true);
            }
            add(brick);
        }
    }

1 个答案:

答案 0 :(得分:0)

我想你想在for循环中创建很多砖块。

你做错了,每次迭代你只是改变一块砖的位置。 您需要在每次迭代时创建一个新砖,并将其引用保存到某个结构中,最好是[nrows,brickperrow]维的矩阵。

以下是:

GRect[][] bricks = new GRect[nrows][bricksperrow];
for(j = 1; j <= nrows; j++) { 
    for(i = 0; i < bricksperrow; i++) {
        bricks[j - 1][i].setLocation(
                      i*(brickwidth + brickSep) + 1, 
                      brickoffset + j*(brickheight + brickSep));
        if(j == 1 || j == 2) {
            brick.setColor(Color.RED);
            brick.setFilled(true);
        }
        else if(j == 3 || j == 4) {
            brick.setColor(Color.ORANGE);
            brick.setFilled(true);
        }
        else if(j == 5 || j == 6) {
            brick.setColor(Color.YELLOW);
            brick.setFilled(true);
        }
        else if(j == 7 || j == 8) {
            brick.setColor(Color.GREEN);
            brick.setFilled(true);
        }
        else if(j == 9 || j == 10) {
            brick.setColor(Color.CYAN);
            brick.setFilled(true);
        }
        add(bricks[j - 1][i]);
    }
}

通过这种方式,您可以拥有砖块的全局矩阵,您可以从中删除任何条目。