【发布时间】:2016-01-20 00:01:52
【问题描述】:
我正在用 C 语言编写一个简单的文本游戏,玩家在其中与一个非常简单的 AI 作斗争。在 main() 函数中,只要玩家的生命值或敌人的生命值高于 0,就会有一个循环。请参见下面的示例。
while(grunt->hp > 0 || player->hp > 0) {
stats(player);
printf("Grunt HP: %d\n", grunt->hp);
plyMove(player, grunt);
aiMove(player, grunt);
}
if(player->hp > 0) {
printf("You won the battle!\n"); }
else {
printf("You've lost the battle!\n"); }
return 0;
现在据我了解,只要两个表达式都为真,这个 while 循环就应该可以做到。如果其中只有一个变为假,则循环应该结束。但是,如果敌人的HP低于零,则不会爆发。但是如果玩家的HP低于零,它就会中断。
循环的每次迭代都会打印这些值,因此我可以跟踪它们。
我只是不明白这其中的逻辑吗?如果您需要查看任何其他代码,请告诉我。
【问题讨论】:
-
"只要玩家的HP或敌人的HP高于0,就会有一个循环" - 所以你想继续循环直到双方都死?这听起来不对。你确定你明白“或”是什么意思吗?
-
你自相矛盾。在第一段中,您承认只要其中一个条件为真,循环就会继续。在第二段中,您说您希望循环在其中一个条件为假时立即停止。
-
我认为您的代码是正确的,它与您在第一段中的描述相匹配。这是与您的第一段相矛盾的第二段。
-
只需添加
&&而不是||
标签: c