2017-02-03 20 views
-2

私のC++コードには問題があります。私は初心者です。同様に、C++の非常に基本的な知識があるだけです。だから、私は本当にこれを行う方法を考え出すことができません。私はC++コマンドを使ってRPGゲームを作ることを考えていました。しかし何とか、私は英雄のための一定の健康を作ることができませんでした。C++で引数が多すぎます

#include <iostream> 
#include <cstdlib> 
#include <ctime> 



using namespace std; 


class player 
{ public: 
    int health = 100; 
}; 

int battle(); 
void death(); 

int main() 
{ 
    int abc; 
    player hero; 
    hero.health = abc; 
    int a; 
    int replay = 1; 
    cout << "You have 100 Hp. \n"; 
    while (replay == 1) 
{ 

srand(time(0)); 
cout << "\n Press 1 to move forward; 2 To stay. \n"; 
cin >> a; 
    if (a == 2) 
    { 
     if (rand() % 4 + 1 != 1) 
     { 
      cout << "You stay at your place. \n"; 
     } 
     else 
     { 
      cout << "Enemy Attacks! (20 Hp) \n"; 
      //battle(hero.health); 
      //cout << "\n Press 1 to continue. \n"; 
      cout << "\n Do you want to play again? Press 1 to replay and 0 to quit.\n"; 
      cin >> replay; 
     } 
    } 
    else if (a == 1) 
    { 
     if (rand() % 2 + 1 != 1) 
     { 
      cout << "You moved forward. No one around. \n"; 
     } 
     else 
     { 
      cout << "You move forward. Enemy attacks! (20 Hp) \n"; 
      battle(abc); 
      cout << "\n Do you want to play again? Press 1 to replay and 0 to quit.\n"; 
      cin >> replay; 
     } 
    } 
    else 
    { 
     cout << "Sorry. Please enter a valid move. \n"; 
    } 

} 

return 0; 
} 

int battle(int x) 
{ 
    player enemy; 
    enemy.health = 20; 
    player hero; 
    int y; 


while (enemy.health >= 0) 
{ 
int eattack = rand() % 15 + 7; 
int attack = rand() % 10 + 1; 
int escape = rand() % 4 + 1; 
cout << "\n Press 1 to attack. 2 to flee \n"; 
cin >> y; 
if (y == 2) 
    { 
     if (escape != 1) 
     { 
     cout << "Can't escape! \n"; 
     cout << "Enemy attacked! Dealing a damage of: " << eattack << " Hp. \n"; 
     hero.health = hero.health - eattack; 
     cout << "Your Hp is: " << hero.health; 
     } 
     else 
     { 
     goto Aftermath; 
     } 

    } 
else if (y != 1) 
    { 
     cout << "Sorry. Please enter a valid response. \n"; 
    } 
else 
    { 
     cout << "You attack the enemy. \n"; 
     cout << "You deal a damage of: " << attack; 
     enemy.health = enemy.health - attack; 
     if (enemy.health >= 0) 
     { 
      cout << "\n Enemy attacks you, dealing: " << eattack << " Hp damage."; 
      hero.health = hero.health - eattack; 
      cout << "\n You have: " << hero.health << " Hp left."; 
     } 
    } 

if ((hero.health <= 0) || (hero.health == 0)) 
    { 
     death(); 
     enemy.health = -1; 
    } 
} 

if (hero.health > 0) 
    { 
     cout << "\n Enemy fainted!"; 
     //cout << "You found Hp Potion! Your Hp was refilled."; 
    } 

    Aftermath: 
     if ((hero.health > 0) && (enemy.health > 0)) 
     { 
      cout << "Escaped Successfully! \n"; 
     } 

    return x; 

    } 
void death() 
    { 
     cout << "You died!"; 
    } 

、コードを見てみるとご覧の通り、私は[私は今のところコメントしている] battle(abc)battle(hero.health)を求めているが、問題がある、それは「int battle()を機能させるにあまりにも多くの引数を述べています。以前は、私は単純にパラメータを避け、戦闘方法そのものにオブジェクト「ヒーロー」を作成しました。しかし、バトルシーケンスを終えるたびに、それが戻ってきて再び宣言して、健康補充を行います。

実際にはグローバル変数とそのすべてについて知りませんが、回避策があるかどうか、またはこのパラメータの問題を解決する方法があるかどうかを知りたいだけです。 o健康が「一定」であり、毎回宣言されず、温かく受け入れられます。どうもありがとうございます!

P.S.コードを短縮するための提案も受け入れますが、私は初心者です。だから先進的な戦略は今私のスキルを超えています。私は概念を理解するのに時間がかかります。

+0

ABCが初期化されていません。 –

答えて

2

mainメソッドの前に関数を宣言してから、mainメソッドの後に関数を実装します。

問題は、としての機能を実装し、次のとおりです。

int battle(int x) 

が、これはあなたの宣言と一致しません:battle機能が期待と一致するように

int battle(); 

はちょうどあなたの関数宣言のブロックを変更します署名:

int battle(int x); 
void death(); 

これはコードをコンパイルすることになりますが、これを動作させるにはまだ多くのステップが必要です。

私はあなたに1つのスターターを与えます:battleにヒットポイントを渡す代わりに、プレーヤー全体を渡してください。

void battle(Player &player) 
{ 
    // ... 
} 

次に、プレーヤーのヒットポイントをbattle機能で直接変更することができます。

あなたは、その後でこれを呼び出します。

battle(hero); 
+0

ありがとうございました!コードは今動作します!私はここに新しいです、実際には迅速な答えを期待していない。ありがとう!将来の問題がある場合は、質問自体にお知らせします。 –

+1

@SabeshBharathiようこそスタックオーバーフロー。別の問題がある場合は、別の質問をする必要があります。これを変更するのではなく、あなたの旅で幸運を祈る!また、この回答があなたの問題を解決した場合は、その答えの横にあるTickボタンを押してください。 –

関連する問題