C++ 如何在C++;

C++ 如何在C++;,c++,oop,C++,Oop,我有一个任务要做一个小游戏 构建一个文本冒险游戏,它接受用户输入并执行某些操作 //在游戏开始时,用户可以选择一种类型的玩家(1、2、3) //每种类型的玩家都从以下属性开始- //玩家1-最大生命值=50,伤害=10,治疗=20 //玩家2-最大生命值=75,伤害=25,治疗=10 //玩家3-最大生命值=100,伤害=75,治疗=20 问题是当我尝试重新声明对象时,它并没有改变 Player player(0,0,0); int player_no; bool gameover=false;

我有一个任务要做一个小游戏

构建一个文本冒险游戏,它接受用户输入并执行某些操作

//在游戏开始时,用户可以选择一种类型的玩家(1、2、3) //每种类型的玩家都从以下属性开始-

//玩家1-最大生命值=50,伤害=10,治疗=20

//玩家2-最大生命值=75,伤害=25,治疗=10

//玩家3-最大生命值=100,伤害=75,治疗=20

问题是当我尝试重新声明对象时,它并没有改变

Player player(0,0,0);
int player_no;
bool gameover=false;

 std::cout<<"choose your player !!!";
 std::cin>>player_no;
 if(player_no==1){
   Player player1(50,20,10); //value is not reflected inside while
   std::cout<<player.heal;  //50
   std::cout<<player.health; //20
   goto start;
 }else if(player_no==2){
   Player player(75,10,25);  //value is not reflcted inside while
   goto start;
 }


 char command;
  start:
 while(!gameover){
   std::cout<<"what do you want ??? ";
   std::cin>>command;
   if(command=='D'){
     std::cout<<player.health<<"\n";  //uses the default value 0
      std::cout<<player.damage<<"\n";  //uses the default value 0
     player.TakeDamage(player.damage);  //0 is passed
   }else if(command=='H') {
       player.Heal(player.heal);         // 0 is passed
   } 
Player(0,0,0);
国际玩家号;
bool gameover=false;
标准::coutplayer_no;
如果(玩家号=1){
Player player1(50,20,10);//值在
std::cout有很多问题:
1) 变量的名称:
您在第1行调用player,在if(player_no==1){

2) 该范围不受尊重: 当你创建一个新玩家(75,10,25)时,它不会替换第一个创建的玩家

我更喜欢这样使用指针(有无限的方法可以做到!)


希望它能帮助你!

用一个小例子来说明你的问题:

    int a = 2;
    if (a == 2)
    {
        std::cout << "a is " << a << std::endl;
        int a = 3;
        std::cout << "a set to " << a << std::endl;
    }
    std::cout << "a is " << a << std::endl;
为什么
a
3不在第二行?那是因为大括号
{…}
声明一个新的作用域,行
int a=3
声明一个新的
a
变量,该变量仅为该作用域的局部变量。第二个
a
变量离开if作用域时,第二个
a
变量消失,只剩下仍然设置为2的原始变量

如果我们将其更改为:

    int a = 2;
    if (a == 2)
    {
        std::cout << "a is " << a << std::endl;
        a = 3;
        std::cout << "a set to " << a << std::endl;
    }
    std::cout << "a is " << a << std::endl;
修复代码的方法是执行以下操作:

Player player(0, 0, 0);
...
if (player_no == 1) {
    player = Player(50, 20, 10);
    ...
}

什么是
Player
?什么是
TakeDamage
,什么是
eal
?你的
主要功能在哪里?我认为你没有给出足够的上下文。请提供一个玩家(75,10,25);//值在创建新的
player
变量时不会在内部反映,该变量与外部作用域中的
player
变量没有连接。此变量仅存在于其内部的块中。您需要更改现有
player
对象中的值
player=player(50,20,10)怎么样;
而不是
玩家1(50,20,10);
    int a = 2;
    if (a == 2)
    {
        std::cout << "a is " << a << std::endl;
        a = 3;
        std::cout << "a set to " << a << std::endl;
    }
    std::cout << "a is " << a << std::endl;
a is 2
a set to 3
a is 3
Player player(0, 0, 0);
...
if (player_no == 1) {
    player = Player(50, 20, 10);
    ...
}