Snake自我优化

时间:2012-12-05 20:37:59

标签: java

我写了自己的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");

        }
    }
}

Video (Started at 35 s.)

VisualVM result

但它太慢了,在游戏结束之前,蛇会做大约5次动作。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

通过HashSetadd电话将正文单元存储在remove中。 O(1)。此外,如果您使用LinkedHashSet,则可以非常轻松地管理头部和尾部(每条评论)。

这一切都在说,虽然这是正确的数据结构并回答了你的问题,但我完全不知道为什么必须对几十个元素进行for循环才能让你的程序变得如此可怕。我强烈建议分析并找到实际的瓶颈,因为我甚至不确定散列集在这个规模上会更快。