2017-02-03 4 views
-2

Я столкнулся с трудностями в своем коде на C++. Я начинающий. Например, только с очень базовыми знаниями C++. Итак, я действительно не могу понять, как это сделать. Я думал о создании RPG-игры с использованием команд C++ и близок к ее завершению. Но каким-то образом я не мог сделать постоянное здоровье для героя. Взглянув на код,Слишком много аргументов в 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(). Ранее, Я просто избегал параметров и создавал объект «герой» в самом боевом методе, но каждый раз, когда вы проходите боевую последовательность, он возвращается и снова заявляет об этом, тем самым делая свое здоровье. [Посмотрите на if (hero.health > 0)]

I действительно не знаю о глобальных переменных и все такое. Я просто хочу знать, есть ли обходной путь или способ решить эту проблему параметров. Любые другие предложения t o иметь здоровье как «постоянное» и не декларироваться каждый раз, также тепло принимается. Спасибо огромное!

P.S. Предложения по сокращению кода также принимаются, но, пожалуйста, я новичок. Таким образом, передовые стратегии сейчас находятся вне моих навыков. Я занимаю время, чтобы понять концепции.

+0

а не инициализированы. –

ответ

2

Вы объявляете функцию перед методом main, а затем реализуете функцию после метода main.

Проблема заключается в том, вы реализуете функцию, как:

int battle(int x) 

, но это не соответствует вашей декларации:

int battle(); 

Просто измените вашу функцию декларации блока, так что функция battle соответствует ожидаемой Подпись:

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

Это поможет вам скомпилировать ваш код, но вы все еще можете сделать несколько шагов, чтобы заставить его работать.

Я дам вам один стартер: вместо прохождения в hitpoints в battle, пройдите весь плеер.

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

Затем вы можете изменить хитпоинты игрока непосредственно в функции battle.

Вы бы тогда назвать это с:

battle(hero); 
+0

Спасибо вам большое! Код теперь работает! Я новичок здесь и на самом деле не ожидал быстрого ответа. Благодаря! Если будут проблемы будущего, я дам вам знать в самом вопросе! –

+1

@SabeshBharathi Добро пожаловать в переполнение стека. Если у вас есть другая проблема, вы должны задать другой вопрос. вместо того, чтобы модифицировать это. Удачи вам в путешествии! Кроме того, если этот ответ решил вашу проблему, нажмите кнопку «Отметить» рядом с ответом. –

Смежные вопросы