0

我在我的应用程序中寻找错误,它看起来在这里:

for (int y=0; y<MAP_HEIGHT; y+=10) {
    for (int x=0; x<MAP_WIDTH; x+=10) {
        Label:

        for (GameResource res : resources) {
            //Checks if some object is already at given point
            if (res.getArea().contains(new Point2D.Float(x, y))) { 
                continue Label;
            }
        }

        if ((int)(Math.random()*200) == 0) {
            resources.add(new GameTree(x, y));
        }

        if ((int)(Math.random()*400) == 0) {
            resources.add(new GameMine(x, y));
        }
    }
}

它创建地图。我检查了一下,看起来即使某个对象在给定点,尽管如此,资源还是被放置了。我是否正确使用了标签?如果使用点,我想进入 x-for 循环中的下一个迭代。

4

2 回答 2

1

你也可以在没有任何标签的情况下这样做:

    for (int y=0; y<MAP_HEIGHT; y+=10) {
        for (int x=0; x<MAP_WIDTH; x+=10) {

            if (noResourcesAtPoint(resources, x, y))
            {
                if ((int)(Math.random()*200) == 0) {
                    resources.add(new GameTree(x, y));
                }

                if ((int)(Math.random()*400) == 0) {
                    resources.add(new GameMine(x, y));
                }
            }
        }
    }       


private boolean noResourcesAtPoint(GameResources resources, int x, int y)
{
    for (GameResource res : resources)
    {
        if (res.getArea().contains(new Point2D.Float(x,y)))
        {
            return false;
        }
    }
    return true;
}
于 2013-02-07T18:05:58.253 回答
1

如果你想进入 x 循环的下一次迭代,你的标签应该在 x 循环上:

Label: for (int x = 0; x < MAP_WIDTH; x += 10)
于 2013-02-07T17:38:07.350 回答