0

我正在尝试为我的学校项目用 C++ 创建一个基于文本的冒险游戏。我遇到的问题是我的 gameover() 函数需要能够转到我的 begin() 函数。问题是必须在 gameover() 函数之前声明 begin() 以允许它进入 begin(),只有我有其他函数也需要访问 gameover(。简而言之,我需要一种能够告诉我的程序的方法转到函数gameover()或begin(),并知道它存在并被声明。谢谢,西蒙

void begin() {
   int name;
   int choice1;
   system("cls");
   cout << "To start your adventure, please enter your name." << endl;
   cin >> name;
   cin.ignore();
   system("cls");
   cout << "Hello " << name << " Your adventure now begins.... Who knows what's in store for you!" << endl;
   system("pause");
   system("cls");
   cout << "You find yourself in a dark, cramp library. " << endl;
   cout << "You don't know how you got here, or where you are." << endl;
   cout << "Luckily there is a sword laying on the ground next to you \nand an open door in front.\n" << endl;
   cout << "What will you do?" << endl;
   cout << "1. Pick up the sword" << endl;
   cout << "2. Walk forward through the door" << endl;
   cout << "3. Use the sword to end your miserable existence!" << endl;
   cin >> choice1;
   cin.ignore();
   system("cls");
   if (choice1 == 1) {
      cout << "You quickly pick up the sword and run through the door." << endl;
      system("pause");
      road();
   }
   else if (choice1 == 2) {
      cout << "While you make you way to the door...." << endl;
      cout << "You somehow managed to trip on the sword." << endl;
      cout << "You fall on the hilt smashing your neck, and end your painfully short life. " << endl;
      system("pause");
      gameover();
   }
   else   {
      cout << "That wasn't an option....." << endl;
      cout << "You have now broken the game. Good day Sir!!!" << endl;
   }
 }


 void gameover() {
    int choice_b;
    cout << " Oops! You died.... Try Again." << endl;
    cout << "\n1. Start Again!" << endl;
    cout << "2. Exit" << endl; 

    cin >> choice_b;
    cin.ignore();
    system("cls"); 

    if (choice_b == 1) {
        begin();
    }
    else if (choice_b == 2) { std::exit; }
 }
4

5 回答 5

1

C++ 要求您在调用语句之前描述函数。如果您要在 main() 顶部添加定义,那么它的调用语句将在任何地方工作,第二个选项是在调用之前声明函数。您希望该功能在哪里可以访问,这取决于您。

基本上,如果您在头文件或 main 顶部添加一些声明,那么这些函数将在任何地方工作

#include headerfiles....
void begin(); //
void end(); // Function prototypes 
int main()
{
   .....
    begin(); // Will work here
}
于 2014-05-11T06:55:33.203 回答
0

您应该在文件顶部(或 gameover() 函数上方)添加这样的函数声明:

void begin();
于 2014-05-11T06:45:59.363 回答
0

添加包含函数声明的头文件begin,或者通过在第一次使用之前gameover添加void begin();和添加自己的声明。void gameover()

于 2014-05-11T06:49:14.623 回答
0

解决方案是将gameoverbegin功能解耦。考虑一下:

bool continueGame = true;

void gameover()
{
 //your gameover code
 if (userChoosesToExit) continueGame = false;
}


void begin()
{
 //your begin code
 if (playerDies) gameover();
}

void controllerFunction()
{
 while (continueGame) 
 {
  begin();
 }//while

}//controller

这样,在 之后gameover,程序控制将退出begin函数,如果continueGame仍然为真,while 循环将继续循环并begin再次被调用。这样,您还可以begin随时gameovercontrollerFunction. 这只是逻辑结构的问题。有了这个提示,您将能够想出一个比我发布的更聪明的逻辑。

于 2014-05-11T06:57:48.380 回答
0

您的代码是不必要的递归:begin()调用gameover()调用begin()调用...

最好有一个调用必要函数的外循环,比如

int gameover()
{   // ...
    // if (choice_b == 1) {
    // begin();
    // }
    // else if (choice_b == 2) { std::exit; }
    return choice_b;
}

int i = 0;
while (i != 2)
{   begin();
 // ...
    i = gameover();
}
于 2014-05-11T07:01:46.407 回答