Game Over条件简单的Snake c ++游戏

时间:2018-04-03 14:39:23

标签: c++ collision-detection

我掌握了c ++的基本知识,并尝试创建一个在while循环中运行的简单Snake游戏,只要“Game Over”条件的计算结果为false即可。 如果它变成“真”(当蛇头出界时),“游戏结束!”打印在液晶屏上。

出于某种原因,代码会在屏幕上直接跳过游戏,而不会自行运行游戏。

我的代码涉及几个类,其中一个我有一个碰撞检测功能,如下所示:

bool SnakeEngine::collision_detection()
{
    // check the snake coordinates so that the head doesn't go off screen
    if (_head_y < 1) {
        return 1;
    }
    if (_head_y > HEIGHT - 4) {
        return 1;
    }
    if (_head_x < 1) {
        return 1;
    }
    if (_head_x > WIDTH - 4) {
        return 1;
    } else {
        return 0;
    }

}

在主循环中我有:

int main()
{
    snake.draw(lcd); // draw the initial game frame and the sprites
    lcd.refresh();

    while(!snake.collision_detection()) {

        snake.read_input(pad); // reads the user input
        snake.update(pad); // updates the sprites positions and calls the collision_detection() function
        render(); // clears the lcd, draws the sprites in the updated positions, refreshes the lcd
        wait(1.0f/fps);

    }
    lcd.printString("Game Over!",6,4);
    lcd.refresh();
}

为什么这不起作用? 谢谢

2 个答案:

答案 0 :(得分:1)

碰撞检测是一个嫌疑人。如果您检查的所有特定条件都未返回true1),则最终结果应为false0)。

这种情况限制太多:

  if (_head_x > WIDTH - 4) {
        return 1;
    } else {
        return 0;
    }

应限于:

  if (_head_x > WIDTH - 4) {
        return 1;
  }

  return 0;

使用bool类型truefalse的修改后的代码如下所示:

bool SnakeEngine::collision_detection()
{
    // check the snake coordinates so that the head doesn't go off screen
    if (_head_y < 1) {
        return true;
    }

    if (_head_y > HEIGHT - 4) {
        return true;
    }

    if (_head_x < 1) {
        return true;
    }

    if (_head_x > WIDTH - 4) {
        return true;
    } 

    return false;
}

答案 1 :(得分:0)

试试这个,只是猜测。我认为当所有四个条件都是假的时候,你应该得出结论没有碰撞。我认为你在else的最后collision_detection()声明中犯了大错。

bool SnakeEngine::collision_detection()
{
    // check the snake coordinates so that the head doesn't go off screen
    if (  _head_y < 1 || _head_y > (HEIGHT - 4) || _head_x < 1 || _head_x > (WIDTH - 4) )
        return true;

       return false;
}