我掌握了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();
}
为什么这不起作用? 谢谢
答案 0 :(得分:1)
碰撞检测是一个嫌疑人。如果您检查的所有特定条件都未返回true
(1
),则最终结果应为false
(0
)。
这种情况限制太多:
if (_head_x > WIDTH - 4) {
return 1;
} else {
return 0;
}
应限于:
if (_head_x > WIDTH - 4) {
return 1;
}
return 0;
使用bool
类型true
和false
的修改后的代码如下所示:
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;
}