为什么下面的 while 循环与 AND 一起使用,而不是 OR

Why does the following while loop work with an AND, as opposed to an OR

本文关键字:OR 一起 AND while 循环 为什么      更新时间:2023-10-16

所以我正在制作一个游戏,我只是通过将我的 OR 更改为 AND 来设法解决我遇到的问题,我不确定我是否理解为什么它与逻辑相反有效 ||我以前有过那里。

//while user doesn't press quit, hasn't crashed into a bomb or hasn't saved all bears the game continues
while (((!wantsToQuit(key)) && (hasLost == false)) && (bearsSaved !=3))
{
if (isArrowKey(key))
{
updateGameData(grid, bears, bombs, detonator, exit, key, message, bearsSaved, bombsActive, moves, hasLost); //move bear in that direction
updateGrid(grid, maze, bears, bombs, detonator, exit);  //update grid information
}
else if (toupper(key) == CHEAT) //pressing c enables cheat mode; disables bombs and sets the users moves to 500
{
cheatMode(message, moves, cheatActive, bombsActive);
}
else
message = "INVALID KEY!";   //set 'Invalid key' message
paintGame(grid, message, bearsSaved, moves); //display game info, modified grid & messages
key = getKeyPress();            //display menu & read in next option
}
endProgram();                       //display final message
return(0);

基本思想是,用户必须通过引导它们穿过迷宫并避免炸弹来拯救 3 只熊。

  • 如果他们走进炸弹,hasLost被设置为true,因此结束程序运行。
  • 如果他们按 Q,则 while 循环不再为真,并且 endProgram 将运行。
  • 但是,如果所有熊都得救了,那么游戏也结束了。

我不明白的是为什么这个while循环工作:

玩家不想退出,玩家没有输,玩家也没有拯救所有 3 只熊。

与以下相反:

玩家不想退出,玩家没有输,或者玩家没有拯救所有 3 只熊。

对我来说,后者在逻辑上更有意义,因为人们会期望游戏继续运行,而他们不想退出并且没有输,或者如果他们没有拯救所有的熊。

感谢您的澄清

玩家不想

退出,玩家没有输,或者玩家没有拯救所有 3 只熊

在这种情况下,您的 while 循环条件将如下所示:

while (((!wantsToQuit(key)) && (hasLost == false)) || (bearsSaved !=3))

让我们假设玩家没有输,并且他不想退出游戏。现在,如果你的玩家拯救了 3 只熊,那么bearsSaved !=3条件将被伪造。但是,由于您使用了||即使第二个陈述被伪造,游戏也会继续,因为第一个陈述仍然是正确的这违背了你的逻辑,因为你想要:

但是,如果所有熊都得救了,那么游戏也结束了。

使用||语句,您必须证伪这两个条件(我将前 2 个括号条件视为一个主要条件)才能终止循环。

这就是为什么你现在使用的逻辑是有意义的;一旦用户获胜,AND条件就会被证伪,一旦一个AND条件被证伪,循环就会终止。