C ++中if and else if和else表达式中的文本冒险选项

时间:2019-06-21 02:40:18

标签: text adventure

你好,我是C ++的新手。

我正在进行一次测试文字冒险,但无法获得选择查看角色Kyung的选项的冒险。

我在做什么错了?

我试图使用else if表达式使程序查看Kyung,但是当我键入“ TURN”以尝试查看kyung时,程序结束。 我不知道我在做什么错。

#include <iostream>

using namespace std;



int main()
{

    string choice;
    cout << "                 |                                          " << endl;
    cout << "                 |                                          " << endl;
    cout << "                 |                                          " << endl;
    cout << "                 |                                          " << endl;
    cout << "                 |                                          " << endl;
    cout << "                 |__________________________________________" << endl;
    cout << "                /..........................................." << endl;
    cout << "               /............................................" << endl;
    cout << "              /............................................." << endl;
    cout << "             /.............................................." << endl;
    cout << "            /..............................................." << endl;
    cout << "           /................................................" << endl;
    cout << "          /................................................." << endl;
    cout << "         /.................................................." << endl;
    cout << "        /..................................................." << endl;
    cout << "       /...................................................." << endl;
    cout << "      /....................................................." << endl;
    cout << "     /......................................................" << endl;
    cout << "    /......................................................." << endl;
    cout << "   /........................................................" << endl;
    cout << "  /........................................................." << endl;
    cout << " /.........................................................." << endl;
    cout << "/..........................................................." << endl;
    cout << "You wake-up in a empty room, you are on the ground." << endl;
    stupid1:
    cout << "Choices: type STAND to stand." << endl;

    cin >> choice;
    if(choice == "STAND") {
    cout << " you stood up." << endl;
    stupid2:
    cout << "  |                ----------------------------             " << endl;
    cout << "  |                |  ----------------------  |             " << endl;
    cout << "  |                | |       _____          | |             " << endl;
    cout << "  |                | |      /     |         | |             " << endl;
    cout << "  |                | |      |     |         | |             " << endl;
    cout << "  |                | |      \    /          | |             " << endl;
    cout << "  |                | |     __|   |___       | |             " << endl;
    cout << "  |                | |    /          \      | |             " << endl;
    cout << "  |                | |___|____________|_____| |             " << endl;
    cout << "  |                |__________________________|             " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |_________________________________________________________" << endl;
    cout << " /.........................................................." << endl;
    cout << "/..........................................................." << endl;
    cout << " You see a painting on the wall." << endl;
    } else {
    cout << "That is not a choice." << endl;
    goto stupid1;
    }
    cout << "Choices, type TURN to turn around, or type INSPECT to inspect painting." << endl;
    cin >> choice;
    if(choice == "INSPECT") {
    cout << "                                                            " << endl;
    cout << "     __________________________________________________     " << endl;
    cout << "    |                                                  |    " << endl;
    cout << "    |                                                  |    " << endl;
    cout << "    |                                                  |    " << endl;
    cout << "    |                                                  |    " << endl;
    cout << "    |                 _____________                    |    " << endl;
    cout << "    |                /             \                   |    " << endl;
    cout << "    |               |               |                  |    " << endl;
    cout << "    |               |  __    __     |                  |    " << endl;
    cout << "    |               |  O |   O      |                  |    " << endl;
    cout << "    |               |    |          |                  |    " << endl;
    cout << "    |               |    |_         |                  |    " << endl;
    cout << "    |               |               |                  |    " << endl;
    cout << "    |                \  -----      /                   |    " << endl;
    cout << "    |            _____|           |_______             |    " << endl;
    cout << "    |         __/                         \____        |    " << endl;
    cout << "    |       /                                  \       |    " << endl;
    cout << "    |      /                                    \      |    " << endl;
    cout << "    |     |                                      |     |    " << endl;
    cout << "    |     |                                      |     |    " << endl;
    cout << "    |_____|______________________________________|_____|    " << endl;
    cout << "                                                            " << endl;
    cout << "                                                            " << endl;
    cout << "You inspected the painting." << endl;
    stupid3:
    cout << "Type BACK to go back." << endl;
    cin >> choice;
    if(choice == "BACK") {
    cout << "You went back." << endl;
       goto stupid2;
    } else if(choice == "TURN"){
        cout << "                                                 |          " << endl;
        cout << "                                                 |          " << endl;
        cout << "                                                 |          " << endl;
        cout << "                                                 |          " << endl;
        cout << "                                                 |          " << endl;
        cout << "                                                 |          " << endl;
        cout << "                                                 |          " << endl;
        cout << "                      /-\/-\                     |          " << endl;
        cout << "                     |  |  |                     |          " << endl;
        cout << "                     |  |  |                     |          " << endl;
        cout << "                 _____\ | /__                    |          " << endl;
        cout << "                /            \                   |          " << endl;
        cout << "               | _____  _____ |                  |          " << endl;
        cout << "               |       W      |                  |          " << endl;
        cout << "                \____      __/                   |          " << endl;
        cout << "                   /       \                     |          " << endl;
        cout << "__________________/_       _\____________________|          " << endl;
        cout << "....................|     |.......................\         " << endl;
        cout << "....................|     |........................\        " << endl;
        cout << "....................|_/-\_|.........................\       " << endl;
        cout << ".....................................................\      " << endl;
        cout << "......................................................\     " << endl;
        cout << ".......................................................\    " << endl;
        cout << "........................................................\   " << endl;
        cout << ".........................................................\  " << endl;
        cout << "..........................................................\ " << endl;
        cout << "............................................................" << endl;
        cout << "You saw Kyung" << endl;
    } else {
      cout << "That is not a choice." << endl;
      goto stupid3;
    }
    }







    return 0;
}

1 个答案:

答案 0 :(得分:0)

这仅仅是因为您的TURN选择位于INSPECT选择之内:

if(choice == "INSPECT") {

  ... 

  if(choice == "BACK") {
  cout << "You went back." << endl;
     goto stupid2;
  } else if(choice == "TURN"){
     ...
  }

}

如果是这样的块,则应将其从TURN中移出INSPECT

if(choice == "INSPECT") {
  ...
}
... 

if(choice == "BACK") {
  cout << "You went back." << endl;
  goto stupid2;

} else if(choice == "TURN"){
     ...
}

更多

您应该避免在代码中使用goto,因为调试goto代码确实很困难,请在Spaghetti code阅读更多信息。您可以通过对游戏循环使用while循环,对每个选项使用function来重构代码。

以下是带有while循环的工作版本:

#include <iostream>

using namespace std;

void startRoom()
{
    cout << "                 |                                          " << endl;
    cout << "                 |                                          " << endl;
    cout << "                 |                                          " << endl;
    cout << "                 |                                          " << endl;
    cout << "                 |                                          " << endl;
    cout << "                 |__________________________________________" << endl;
    cout << "                /..........................................." << endl;
    cout << "               /............................................" << endl;
    cout << "              /............................................." << endl;
    cout << "             /.............................................." << endl;
    cout << "            /..............................................." << endl;
    cout << "           /................................................" << endl;
    cout << "          /................................................." << endl;
    cout << "         /.................................................." << endl;
    cout << "        /..................................................." << endl;
    cout << "       /...................................................." << endl;
    cout << "      /....................................................." << endl;
    cout << "     /......................................................" << endl;
    cout << "    /......................................................." << endl;
    cout << "   /........................................................" << endl;
    cout << "  /........................................................." << endl;
    cout << " /.........................................................." << endl;
    cout << "/..........................................................." << endl;
    cout << "You wake-up in a empty room, you are on the ground." << endl;
}

void standChoice()
{
    cout << " you stood up." << endl;
    cout << "  |                ----------------------------             " << endl;
    cout << "  |                |  ----------------------  |             " << endl;
    cout << "  |                | |       _____          | |             " << endl;
    cout << "  |                | |      /     |         | |             " << endl;
    cout << "  |                | |      |     |         | |             " << endl;
    cout << "  |                | |      \    /          | |             " << endl;
    cout << "  |                | |     __|   |___       | |             " << endl;
    cout << "  |                | |    /          \      | |             " << endl;
    cout << "  |                | |___|____________|_____| |             " << endl;
    cout << "  |                |__________________________|             " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |                                                         " << endl;
    cout << "  |_________________________________________________________" << endl;
    cout << " /.........................................................." << endl;
    cout << "/..........................................................." << endl;
    cout << " You see a painting on the wall." << endl;
}

void notChoice()
{
    cout << "That is not a choice." << endl;
}

void inspectChoice()
{
    cout << "                                                            " << endl;
    cout << "     __________________________________________________     " << endl;
    cout << "    |                                                  |    " << endl;
    cout << "    |                                                  |    " << endl;
    cout << "    |                                                  |    " << endl;
    cout << "    |                                                  |    " << endl;
    cout << "    |                 _____________                    |    " << endl;
    cout << "    |                /             \                   |    " << endl;
    cout << "    |               |               |                  |    " << endl;
    cout << "    |               |  __    __     |                  |    " << endl;
    cout << "    |               |  O |   O      |                  |    " << endl;
    cout << "    |               |    |          |                  |    " << endl;
    cout << "    |               |    |_         |                  |    " << endl;
    cout << "    |               |               |                  |    " << endl;
    cout << "    |                \  -----      /                   |    " << endl;
    cout << "    |            _____|           |_______             |    " << endl;
    cout << "    |         __/                         \____        |    " << endl;
    cout << "    |       /                                  \       |    " << endl;
    cout << "    |      /                                    \      |    " << endl;
    cout << "    |     |                                      |     |    " << endl;
    cout << "    |     |                                      |     |    " << endl;
    cout << "    |_____|______________________________________|_____|    " << endl;
    cout << "                                                            " << endl;
    cout << "                                                            " << endl;
    cout << "You inspected the painting." << endl;
}

void turnChoice()
{
    cout << "                                                 |          " << endl;
    cout << "                                                 |          " << endl;
    cout << "                                                 |          " << endl;
    cout << "                                                 |          " << endl;
    cout << "                                                 |          " << endl;
    cout << "                                                 |          " << endl;
    cout << "                                                 |          " << endl;
    cout << "                      /-\/-\                     |          " << endl;
    cout << "                     |  |  |                     |          " << endl;
    cout << "                     |  |  |                     |          " << endl;
    cout << "                 _____\ | /__                    |          " << endl;
    cout << "                /            \                   |          " << endl;
    cout << "               | _____  _____ |                  |          " << endl;
    cout << "               |       W      |                  |          " << endl;
    cout << "                \____      __/                   |          " << endl;
    cout << "                   /       \                     |          " << endl;
    cout << "__________________/_       _\____________________|          " << endl;
    cout << "....................|     |.......................\         " << endl;
    cout << "....................|     |........................\        " << endl;
    cout << "....................|_/-\_|.........................\       " << endl;
    cout << ".....................................................\      " << endl;
    cout << "......................................................\     " << endl;
    cout << ".......................................................\    " << endl;
    cout << "........................................................\   " << endl;
    cout << ".........................................................\  " << endl;
    cout << "..........................................................\ " << endl;
    cout << "............................................................" << endl;
    cout << "You saw Kyung" << endl;
}

void gameLoop()
{

    string choice;

    startRoom();

    cout << "Choices: type STAND to stand." << endl;
    while(true)
    {

        cin >> choice;
        if(choice == "STAND")
        {
            standChoice();
            cout << "Choices, type TURN to turn around, or type INSPECT to inspect painting." << endl;
        }
        else if(choice == "INSPECT")
        {

            inspectChoice();
            cout << "Type BACK to go back." << endl;
        }
        else if(choice == "TURN")
        {
            turnChoice();
            cout << "Type BACK to go back." << endl;
        }
        else if(choice == "BACK")
        {
            cout << "You went back." << endl;
            standChoice();
            cout << "Choices, type TURN to turn around, or type INSPECT to inspect painting." << endl;
        }
        else if(choice == "EXIT")
        {
            break;
        }
        else
        {
            notChoice();
            cout << "Choices: type STAND to stand." << endl;
        }

    }

}

int main()
{
    gameLoop();
    return 0;
}