蛇游戏 - 为什么蛇跳过一块瓷砖?

时间:2017-08-14 08:07:00

标签: c++ sfml

我已经制作了一个蛇游戏,并且效果很好,然而,当蛇到达屏幕边缘时,我让它循环回来。 问题是,当他回过头来时,似乎跳过一块?

我不知道如何这样说,所以这里有一段视频。 https://youtu.be/fxuEYsrIZMU

它不会仅仅出现在边缘上,而是跳过1到2个图块。 以下是代码段:

void update(std::vector<sf::RectangleShape>& food) {
        std::cout << body.size();
        for(int i = body.size() - 1; i > 0; i--) {
            checkBounds(body.at(i)); // Check Snake is in screen.
            /* ... */
        }
        checkBounds(body.at(0));
        /* ... */
    }
void checkBounds(sf::RectangleShape& point) {
        if(point.getPosition().x < 0) point.move(WIDTH, 0);
        if(point.getPosition().y < 0) point.move(0, HEIGHT);
        if(point.getPosition().x > WIDTH) point.move(-WIDTH, 0);
        if(point.getPosition().y > HEIGHT) point.move(0, -HEIGHT);
    }

WIDTH,HEIGHT是屏幕W.和H. 身体是std::vector<sf::RectangleShape> 这是完整的代码: https://pastebin.com/sr4Tbrin

1 个答案:

答案 0 :(得分:2)

假设您有一块10格的电路板

当你决定换行时,蛇的头部将是11岁

但是他将被移到11-10 = 1,而不是0。

你需要:

    if(point.getPosition().x > WIDTH) point.move(-(WIDTH+1), 0);
    if(point.getPosition().y > HEIGHT) point.move(0, -(HEIGHT+1));