游戏// 无法更改重载构造函数的值
Game// Can't change the values of overloaded constructor
伙计们。我倾斜了。问题是,每次转弯(我的攻击,敌人的攻击(,我和敌人的统计数据都会重置。即敌人有20点生命值,我处理5点DMG,它检测到变化,在下一次打印时敌人有15点生命值。但在下一回合,敌人的生命值又回到了20。(英雄角色也会发生同样的事情。(P.S真的很抱歉英语不好,代码写得不好。这是整个代码。
#pragma once
#include <string>
using namespace std;
class Hero
{
string Name;
int HP;
int DMG;
int LVL;
int EXP;
int MissChance;
bool HeroCheck;
public:
Hero(void);
~Hero(void);
void Hero_Print();
int BasicAttack();
int HeavyAttack();
void Heal();
void LVLUP();
int GetLVL();
void SetHP(int NewHP);
int GetHP();
int GetMissChance();
};
#pragma once
#include "Hero.h"
#include <iostream>
#include <string>
using namespace std;
Hero::Hero(void)
{
do{
cout<<"TYPE YOUR HERO'S NAME:"<<endl;
cin>>Name;
}while(Name.length()>10);
HP=20;
DMG=5;
LVL=1;
EXP=0;
MissChance=20;
HeroCheck=true;
}
Hero::~Hero(void)
{
}
void Hero::Hero_Print()
{
cout<<"____________"<<endl;
cout<<Name<<"'s STATISTICS"<<endl;
cout<<"HP: "<<HP<<endl;
cout<<"DMG: "<<DMG<<endl;
cout<<"LVL: "<<LVL<<endl;
cout<<"EXP: "<<EXP<<endl;
cout<<"____________"<<endl;
}
int Hero::BasicAttack()
{
return DMG;
}
int Hero::HeavyAttack()
{
return DMG+7;
}
void Hero::Heal()
{
HP=HP+GetLVL();
}
void Hero::LVLUP()
{
LVL++;
}
int Hero::GetLVL()
{
return LVL;
}
void Hero::SetHP(int NewHP)
{
HP=NewHP;
}
int Hero::GetHP()
{
return HP;
}
int Hero::GetMissChance()
{
return MissChance;
}
#pragma once
#include <string>
using namespace std;
class Enemy
{
string Name;
int HP;
int DMG;
int MissChance;
public:
Enemy();
void SetEnemy(string conName, int conHP, int conDMG, int conMissChance);
~Enemy(void);
void Enemy_Print();
int BasicAttack();
int SpecialAttack();
void Heal();
int GetMissChance();
void SetHP(int NewHP);
int GetHP();
string GetName();
};
#include "Enemy.h"
#include <string>
#include <iostream>
using namespace std;
Enemy::Enemy()
{
}
void Enemy::SetEnemy(string conName, int conHP, int conDMG, int conMissChance)
{
Name=conName;
HP=conHP;
DMG=conDMG;
MissChance=conMissChance;
}
Enemy::~Enemy(void)
{
}
void Enemy::Enemy_Print()
{
cout<<"____________"<<endl;
cout<<Name<<"'s Statistics"<<endl;
cout<<"HP: "<<HP<<endl;
cout<<"DMG: "<<DMG<<endl;
cout<<"____________"<<endl;
}
int Enemy::BasicAttack()
{
return DMG;
}
int Enemy::SpecialAttack()
{
return DMG+3;
}
void Enemy::Heal()
{
HP=HP+3;
}
void Enemy::SetHP(int NewHP)
{
HP=NewHP;
}
int Enemy::GetHP()
{
return HP;
}
int Enemy::GetMissChance()
{
return MissChance;
}
string Enemy::GetName()
{
return Name;
}
//All Battle Functions~~
void EnemyBattle(Hero Character, Enemy RandomEnemy);
void BasicAttack(Hero Character, Enemy RandomEnemy);
void SpecialAttack(Hero Character, Enemy RandomEnemy);
void HeroHeal(Hero Character);
void EnemyHeal(Enemy RandomEnemy);
int RandGen();
bool HPHero_Check(Hero Character);
bool HPEnemy_Check(Enemy RandomEnemy);
void Hero_Death(Hero Character);
void Enemy_Death(Enemy RandomEnemy);
void HeroAttacks_Couts(Hero Character);
int MakingTurn();
int MissChance();
void HeroBasicAttack(Hero Character, Enemy RandomEnemy);
void HeroHeavyAttack(Hero Character, Enemy RandomEnemy);
void HeroHeal(Hero Character);
void EnemyBasicAttack(Hero Character, Enemy RandomEnemy);
void EnemySpecialAttack(Hero Character, Enemy RandomEnemy);
void EnemyHeal(Enemy RandomEnemy);
void HeroTurn(Hero Character, Enemy RandomEnemy);
void EnemyTurn(Hero Character,Enemy RandomEnemy);
void SingleBattle(Hero Character,Enemy RandomEnemy);
#pragma once
#include "Enemy.h"
#include "Hero.h"
#include "Functions.h"
#include <iostream>
#include <string>
#include <Windows.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
int MakingTurn()
{
int TurnNum;
do
{
cout<<"Make your turn: ";
cin>>TurnNum;
}while(TurnNum<0||TurnNum>3);
system("cls");
return TurnNum;
}
int MissChance()
{
int RandomNum;
srand (time(NULL));
RandomNum = rand() % 100;
return RandomNum;
}
int RandGen()
{
int x;
srand(time(NULL));
x = rand()% 3+1;
return x;
}
void HeroAttacks_Couts(Hero Character)
{
cout<<"1.Basic Attack: "<<Character.BasicAttack()<<" DMG"<<endl;
cout<<"2.Heavy Attack: "<<Character.HeavyAttack()<<" DMG"<<endl;
cout<<"3.Heal yourself for "<<Character.GetLVL()*3<<" HP"<<endl;
}
#pragma once
#include "Enemy.h"
#include "Hero.h"
#include "Functions.h"
#include <iostream>
#include <string>
using namespace std;
void Enemy_Death(Enemy RandomEnemy)
{
system("cls");
RandomEnemy.Enemy_Print();
cout<<"You defeated the "<<RandomEnemy.GetName()<<"!"<<endl;
}
void Hero_Death(Hero Character)
{
system("cls");
Character.Hero_Print();
cout<<"You died!"<<endl;
}
#pragma once
#include "Enemy.h"
#include "Hero.h"
#include "Functions.h"
#include <iostream>
#include <string>
using namespace std;
bool HPEnemy_Check(Enemy RandomEnemy)
{
if(RandomEnemy.GetHP()<1)
return false;
else return true;
}
bool HPHero_Check(Hero Character)
{
if(Character.GetHP()<1)
return false;
else return true;
}
#pragma once
#include "Enemy.h"
#include "Hero.h"
#include "Functions.h"
#include <iostream>
#include <string>
using namespace std;
//My attacks
void HeroBasicAttack(Hero Character, Enemy RandomEnemy)
{
if(Character.GetMissChance()<MissChance())
{
int NewHP=RandomEnemy.GetHP()-Character.BasicAttack();
RandomEnemy.SetHP(NewHP);
cout<<"Your attack was successful!"<<endl;
RandomEnemy.Enemy_Print();
}else cout<<"You missed your attack!"<<endl;
}
void HeroHeavyAttack(Hero Character, Enemy RandomEnemy)
{
if(Character.GetMissChance()<MissChance())
{
int NewHP=RandomEnemy.GetHP()-Character.HeavyAttack();
RandomEnemy.SetHP(NewHP);
cout<<"Your attack was successful!"<<endl;
RandomEnemy.Enemy_Print();
}else cout<<"You missed your attack!"<<endl;
}
void HeroHeal(Hero Character)
{
Character.Heal();
cout<<"You successfully healed yourself!"<<endl;
Character.Hero_Print();
}
//Enemy attacks
void EnemyBasicAttack(Hero Character, Enemy RandomEnemy)
{
if(RandomEnemy.GetMissChance()<MissChance())
{
int NewHP=Character.GetHP()-RandomEnemy.BasicAttack();
Character.SetHP(NewHP);
cout<<"The "<<RandomEnemy.GetName()<<" hit you with his Basic Attack!"<<endl;
Character.Hero_Print();
}else cout<<"The "<<RandomEnemy.GetName()<<" missed you!"<<endl;
}
void EnemySpecialAttack(Hero Character,Enemy RandomEnemy)
{
if(RandomEnemy.GetMissChance()<MissChance())
{
int NewHP=Character.GetHP()-RandomEnemy.SpecialAttack();
Character.SetHP(NewHP);
cout<<"The "<<RandomEnemy.GetName()<<" hit you with his Special Attack!"<<endl;
Character.Hero_Print();
}else cout<<"The "<<RandomEnemy.GetName()<<" missed you!"<<endl;
}
void EnemyHeal(Enemy RandomEnemy)
{
RandomEnemy.Heal();
cout<<"The "<<RandomEnemy.GetName()<<" successfully used Heal!"<<endl;
RandomEnemy.Enemy_Print();
}
#include "Enemy.h"
#include "Hero.h"
#include "Functions.h"
#include <iostream>
#include <string>
using namespace std;
void HeroTurn(Hero Character, Enemy RandomEnemy)
{
switch(MakingTurn())
{
case 1:
HeroBasicAttack(Character,RandomEnemy);
break;
case 2:
HeroHeavyAttack(Character,RandomEnemy);
break;
case 3:
HeroHeal(Character);
break;
}
}
void EnemyTurn(Hero Character, Enemy RandomEnemy)
{
switch(RandGen())
{
case 1:
EnemyBasicAttack(Character,RandomEnemy);
break;
case 2:
EnemySpecialAttack(Character,RandomEnemy);
break;
case 3:
EnemyHeal(RandomEnemy);
break;
}
}
#pragma once
#include "Enemy.h"
#include "Hero.h"
#include "Functions.h"
#include <iostream>
#include <string>
using namespace std;
//Both mine and enemy's turns
void SingleBattle(Hero Character,Enemy RandomEnemy)
{
cout<<"You have encountered "<<RandomEnemy.GetName()<<"!Brace yourself for battle!"<<endl;
RandomEnemy.Enemy_Print();
do
{
if(!HPHero_Check(Character))
{
Hero_Death(Character);
break;
}else
Character.Hero_Print();
HeroAttacks_Couts(Character);
HeroTurn(Character,RandomEnemy);
if(!HPEnemy_Check(RandomEnemy))
{
Enemy_Death(RandomEnemy);
break;
}else
EnemyTurn(Character,RandomEnemy);
RandomEnemy.Enemy_Print();
}while(HPHero_Check(Character)||HPEnemy_Check(RandomEnemy));
}
#pragma once
#include "Enemy.h"
#include "Hero.h"
#include "Functions.h"
#include <iostream>
#include <string>
using namespace std;
// Selecting random enemy to fight
void EnemyBattle(Hero Character, Enemy RandomEnemy)
{
switch(RandGen())
{
case 1:
{
RandomEnemy.SetEnemy("Orc",18,7,30);
SingleBattle(Character,RandomEnemy);
break;
}
case 2:
{
RandomEnemy.SetEnemy("Skeleton",15,9,35);
SingleBattle(Character,RandomEnemy);
break;
}
case 3:
{
RandomEnemy.SetEnemy("Ghost",17,4,20);
SingleBattle(Character,RandomEnemy);
break;
}
}
}
#include <iostream>
#include <string>
#include <Windows.h>
#include <stdlib.h>
#include <time.h>
#include "Hero.h"
#include "Enemy.h"
#include "Functions.h"
using namespace std;
//Main
int main()
{
Hero Character;
Enemy RandomEnemy;
bool GameRun = true;
do
{
Character.Hero_Print();
EnemyBattle(Character,RandomEnemy);
}while( GameRun);
return 0;
}
*
很简单,您通过复制传递Hero
和Enemy
。这意味着复制你的对象,对其施加伤害/治疗,这对你想要修改的对象没有影响。
请参阅此问题:无法使用方法更改成员值
int main()
{
Hero Character;
Character.Hero_Print();
// This passes a COPY of the character. The heal is applied and then you print the copies stats
HeroHeal(Character);
// However, no changes have been made to Character.
Character.Hero_Print();
}
你需要通过你的Hero
参考
// Takes a reference to the Hero
void HeroHeal(Hero& Character)
{
Character.Heal();
cout<<"You successfully healed yourself!"<<endl;
Character.Hero_Print();
}
现在,传递对Hero
的引用,而不是传递副本。请注意,调用函数的方式不会更改。也就是说,你仍然会写这个:
// Heal the actual hero (parameter passed by reference)
void HeroHeal(Hero& Character);
// Heal a clone of this hero (parameter passed by copy)
void HeroHealClone(Hero Clone);
int main()
{
Hero newHero;
HeroHeal(newHero);
HeroHealClone(newHero);
}
相关文章:
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 两种类型的构造函数重载
- C++ 构造函数重载 - 为什么说我需要括号?
- C++具有多重继承的构造函数重载解析
- C++,处理多个构造函数重载和冗余代码
- c++ 构造函数重载歧义与initializer_list
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 用户定义的构造函数重载与参数超类的重载不匹配
- 模板专用类之间的构造函数重载
- 指向构造函数重载的指针?
- C++简化了构造函数重载
- 类构造函数重载不起作用
- C++类模板构造函数 -- 重载引用 (U&) 与数组 (U*) 失败
- 为什么存在 C++11 std::initializer_list 构造函数重载规则
- 构造函数重载和默认参数
- 模板类构造函数重载解析
- 单例中的构造函数重载不起作用
- 构造函数重载选择了强制转换运算符而不是结构类型
- c++ 11构造函数重载解析和initialiser_lists: clang++和c++不一致.< / h1 &
- C++构造函数重载的经验法则