所以我是一個新的程序員,我決定嘗試做這個遊戲。這是一個基本的,讓我們說人與人的比賽。你輸入每個隊伍的數量,在我的例子中爲Ninjas和Samurai,然後隨機化每個隊伍的攻擊機會並輸出贏家。每次我運行程序時,我都會輸入每種類型的數字,而且我總是會得到忍者生命值爲0的輸出,而武士的生命值爲負值。如果一個團隊的健康狀況達到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。 –
條件「> 0」分別評估每個團隊。在你的while語句中,它將從左到右進行評估,首先檢查totalNinjaHealth> 0,如果這是錯誤的,那麼整個語句是錯誤的並停止。如果totalNinjaHealth> 0爲true,那麼&&操作符將檢查第二個條件是否也爲true,即totalSamuraiHealth> 0.如果第二個條件爲假,則整個語句再次計算爲false,循環將停止。 &&操作符要求操作員的左側評估爲真,右側評估爲真以全面返回真實值 – dmills