背景
我正在制作一個基于回合制的電腦決斗游戲。現在,我正試圖讓游戲的準系統在沒有玩家輸入的情況下運行。在每一回合(玩家或計算機的一個動作)之后,可能會發生以下四種可能性之一:
- 玩家的生活和電腦的生活
- 玩家活著,電腦死了
- 玩家死亡,計算機存活
- 玩家死了,電腦也死了(例如:玩家的攻擊也會對玩家造成傷害。還沒有做任何事情)
問題
當可能性 2,3 或 4 發生時,我不知道如何讓程式停止。現在,整個事情都在運行,玩家和計算機都死了,即使玩家應該使用我當前的代碼。
代碼
這是我當前作業的最小作業示例。我知道我在做一些愚蠢的事情,但我無法確定它。任何建議/指標將不勝感激!
#include <iostream>
class Player
{
private:
int m_hp {};
int m_action {};
public:
Player(int hp = 5): m_hp{hp}
{
}
int attack(const int& attackDamage)
{
return attackDamage;
}
int getHP() const // const because getHP shouldn't alter hp
{
return m_hp;
}
void takeHP(int damage)
{
m_hp = m_hp - damage;
}
void giveHP(int healing)
{
m_hp = m_hp healing;
}
};
class Computer
{
private:
int m_hp {};
public:
Computer(int hp = 5): m_hp{hp}
{
}
int attack(const int& attackDamage)
{
return attackDamage;
}
int getHP() const // const because getHP shouldn't alter hp
{
return m_hp;
}
void takeHP(int damage)
{
m_hp = m_hp - damage;
}
void giveHP(int healing)
{
m_hp = m_hp healing;
}
};
int healthCheck(Player& player, Computer& computer)
{
if (player.getHP() > 0 && computer.getHP() > 0)
{
return 1;
}
else if (player.getHP() > 0 && computer.getHP() <= 0)
{
return 2;
}
else if (player.getHP() <= 0 && computer.getHP() > 0)
{
return 3;
}
else if (player.getHP() <= 0 && computer.getHP() <= 0)
{
return 4;
}
else
{
return 0;
}
}
int gameStatus(int healthCheck, Player& player, Computer& computer)
{
switch(healthCheck)
{
case 1:
std::cout << "The battle continues." << "\n";
std::cout << "Player HP: " << player.getHP() << "\n";
std::cout << "Computer HP: " << computer.getHP() << "\n";
return 1;
break;
case 2:
std::cout << "The monster has been slain";
// add looting function here in future
// Will add money to player object here with addmoney()
return 2;
break;
case 3:
std::cout << "The player has been slain";
return 3;
break;
case 4:
std::cout << "Both duelers have been slain";
return 4;
break;
default:
std::cout << "error: received an int not 1,2,3,4";
return 5;
break;
}
}
void playerTurn(Player& player, Computer& computer)
{
computer.takeHP(1);
}
void computerTurn(Player& player, Computer& computer)
{
player.takeHP(1);
}
int main()
{
// initialize player and computer
Player player {};
Computer computer {};
int gameCondition{1};
// game should continue while the player is still alive
while(gameStatus(gameCondition, player, computer) == 1)
{
playerTurn(player, computer);
// attempt at checking the game status after each turn
gameCondition = healthCheck(player,computer);
gameStatus(gameCondition, player, computer);
computerTurn(player, computer);
gameCondition = healthCheck(player,computer);
gameStatus(gameCondition, player, computer);
}
std::cout << "The battle is over" << "\n";
return 0;
}
uj5u.com熱心網友回復:
你只測驗回圈頂部的狀態,
如果您想立即退出,請執行此操作
// game should continue while the player is still alive
while(gameStatus(gameCondition, player, computer) == 1)
{
playerTurn(player, computer);
// attempt at checking the game status after each turn
gameCondition = healthCheck(player,computer);
if(gameStatus(gameCondition, player, computer) != 1) <<<<=====
break;
computerTurn(player, computer);
gameCondition = healthCheck(player,computer);
// test not needed here since its tested at the start of the loop
gameStatus(gameCondition, player, computer);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/486716.html
下一篇:迭代多個資料幀
