为什么下面的 while 循环与 AND 一起使用,而不是 OR
Why does the following while loop work with an AND, as opposed to an OR
所以我正在制作一个游戏,我只是通过将我的 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条件被证伪,循环就会终止。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 我如何将 OR 与 if 语句一起使用字符串
- 将逻辑 OR 与 cout 运算符一起使用
- 为什么下面的 while 循环与 AND 一起使用,而不是 OR
- 如何使枚举类与'bit-or'功能一起使用?