所以我是一名新程序员,我决定尝试制作这款游戏。这是一个基本的,比方人和人类游戏。您输入每个团队的数量,在我的案例中为Ninjas和Samurai,然后随机化每个团队的攻击几率并输出获胜者。每次我运行程序时,我输入每种类型的数量,并且我总是获得Ninjas的输出为0健康,而Samurai的健康状况为负。当一个团队达到0健康状态时,我怎么能让while循环结束?我尝试过使用totalNinjaHealth!= 0 || totalSamuraiHealth!= 0但该程序无限运行。
#include <iostream>
#include <random>
#include <string>
#include <ctime>
using namespace std;
int main() {
int ninjas;
int NINJA_HEALTH = 2;
int NINJA_ATTACK = 2;
int samurai;
int SAMURAI_HEALTH = 3;
int SAMURAI_ATTACK = 1;
default_random_engine randomGen(time(NULL));
uniform_real_distribution<float> attackChance(0.0f, 1.0f);
cout << " *** Ninjas V Samurai *** " << endl;
cout << "Input amount of Ninjas" << endl;
cin >> ninjas;
cout << "Input amount of Samurai" << endl;
cin >> samurai;
int totalNinjaHealth = NINJA_HEALTH * ninjas;
int totalSamuraiHealth = SAMURAI_HEALTH * samurai;
cout << totalNinjaHealth << endl;
while (totalNinjaHealth > 0 == true || totalSamuraiHealth > 0 == true)
{
if (attackChance(randomGen) > 0.5f) {
totalSamuraiHealth -= NINJA_ATTACK;
cout << totalSamuraiHealth << endl;
}
else if(attackChance(randomGen) < 0.5f) {
totalNinjaHealth -= SAMURAI_ATTACK;
cout << totalNinjaHealth << endl;
}
}
if (totalNinjaHealth == 0) {
cout << "Ninjas lost all " << ninjas << " Ninjas. Samurai remaining " << totalSamuraiHealth << endl;
}
else if (totalSamuraiHealth == 0)
{
cout << "Samurai lost all " << ninjas << " Samurai. Ninjas that remain " << totalNinjaHealth / 2 << endl;
}
cin.get();
cin.get();
return 0;
}
运行时会发生什么的屏幕截图:ConsoleWhenRan 我使用的是||操作员错误?我以为||运算符等待直到一个条件为真然后停止,但是当我运行代码它似乎等到两个都通过,或等于0给出负输出。
答案 0 :(得分:1)
您需要使用&amp;&amp;运营商。 ||是“或”运算符,当其中一个或两个条件为真时,将评估为true。在你的情况下,只要你的一个团队有健康&gt;,while循环就会继续评估。 0.“和”运算符(&amp;&amp;)要求两个条件都为真,以便将语句评估为真。
答案 1 :(得分:0)
会发生什么:
你运行循环,直到任何一支球队的总生命值为正。因此,两支球队的总生命值都小于/等于零。
然后你检查健康状况,你就得到了答案。事实恰恰相反,在你的情况下,其中一支队伍的健康状况正好死亡。但在某些情况下,输出应该既不显示消息也不显示消息。