2

我编写了自己的 Snake 游戏,Snake 在哪里ArrayList of Points,我使用这种方法来检查自食:

public void checkSelfEating() {
    for (int i = 1; i < body.size(); i++) {
        if (body.get(i).equals(body.get(0))) {
            sgv.setGameOverState(true);
            sgv.setMessage("Game over!");
            System.out.println("SelfEatingdetected");

        }
    }
}

视频(从 35 秒开始。)

VisualVM 结果

但它太慢了,蛇大约走 5 步直到游戏结束。有更好的解决方案吗?

4

1 回答 1

3

将 body 单元存储在HashSetviaaddremove调用中。 O(1). 此外,如果您使用 a LinkedHashSet,管理头部和尾部将非常容易(根据评论)。

说了这么多,虽然这是正确的数据结构并回答了您的问题,但我完全不知道为什么必须对几十个元素执行 for 循环会使您的程序如此缓慢。我强烈建议分析并找到实际的瓶颈,因为我什至不确定哈希集在这种规模下会更快。

于 2012-12-05T20:40:44.287 回答