0

我试图从头开始编写一个简单的文本冒险游戏的代码作为编程练习,并得到了令人惊讶的结果。这是完整的代码:

//Twisty Passages All Alike.
//An adventure game designed as a practice exercise.
#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout << "\t\tTwisty Passages, All Alike!\n";
    cout << "\tA text adventure by Jellypox Studios.\n";

    //INVENTORY INDEX NUMBERS:
    //0. note
    //1. hammer
    //2. 


    //ROOM NUMBERS:
    //0. living room
    //1. storeroom


    //Setting up the current room.
    int ALL_ITEMS = 10;
    string inventory[ALL_ITEMS];
    int currentRoom = 0;

    string input = "DEFAULT";

    //Room 0: living room.
    bool haveNote = false;
    bool haveHammer = false;

    //Room descriptions
    if (currentRoom == 0)
    {
        cout << "You are in the living room.\nThere are doors to the south and west and a staircase to the north.\nYou can see: a table, a cat, a fireplace.\n\n";
    }
    else if (currentRoom == 1)
    {
        cout << "You are in the storeroom.\nThe room is a jumbled mass of cupboards, hanging sausages, left-out scraps of food and cockroaches.\nThe only thing of interest here is a large chest in the corner.";
    }


    //THE LIVING ROOM
    while (currentRoom == 0)
    {
        cin >> input;
        //THE TABLE
        if (input == "look table" || "look at table")
        {
            cout << "You see: some bones and scraps";
            if (haveHammer = false)
            {
                cout << ", a hammer";
            }
            if (haveNote == false)
            {
                cout << ", a note";
            }
            cout << ".\n\n";
        }
        else if (input == "look scraps" || "look at scraps" || "look bones" || "look at bones")
        {
            cout << "What a mess!\n\n";
        }
        else if (input == "look note" || "look at note" || "read note")
        {
            if (haveNote == false)
            {
                cout << "Pick it up first!\n\n";
            }
            else
            {
                cout << "It reads: \"Gone hunting. Will be back soon.\"";
            }
        }
        else if (input == "get note" || "take note" || "pick up note")
        {
            if (haveNote == false)
            {
                cout << "Got the note.";
                inventory[0] = "note";
                haveNote = true;
            }
            else
            {
                cout << "You already have the note!\n\n";
            }
        }
        else if (input == "look hammer" || "look at hammer")
        {
            cout << "It's just an ordinary hammer.\n\n";
        }
        else if (input == "get hammer" || "take hammer" || "pick up hammer")
        {
            if (haveHammer == false)
            {
                cout << "Got the hammer.\n\n";
                inventory[1] = "hammer";
                haveHammer = true;
            }
            else
            {
                cout << "You already have the hammer!\n\n";
            }
        }
        //ELSWHERE IN THE ROOM
        else if (input == "look cat" || "look at cat")
        {
            cout << "It stares up at you irritably.\n\n";
        }
        else if (input == "look fireplace" || "look at fireplace")
        {
            cout << "A flickering fire warms the house.\n\n";
        }
        else if (input == "south" || "go south")
        {
            //CODE TO MAKE THE DOOR UNLOCKABLE GOES HERE!
            cout << "The door is locked.\n\n";
        }
        else if (input == "west" || "go west")
        {
            currentRoom = 1;
        }
        else if (input == "north" || "go north" || "upstairs" || "go upstairs")
        {
            currentRoom = 2;
        }
        else
        {
            cout << "Say what?";
        }
    }
    return 0;
}

我尝试对输入/输出系统使用 while 循环,这样如果您键入“查看表格”,它会为您提供表格的描述等,但它会执行以下操作:

look at table
You see: some bones and scraps, a note.

You see: some bones and scraps, a note.

You see: some bones and scraps, a note.

get note
You see: some bones and scraps, a note.

You see: some bones and scraps, a note.

get hammer
You see: some bones and scraps, a note.

You see: some bones and scraps, a note.

go west
You see: some bones and scraps, a note.

You see: some bones and scraps, a note.

我做错了什么?

4

2 回答 2

1

此代码中有拼写错误,例如 if (haveHammer = false)

我相信应该有双'='。编译不会对你大喊大叫,但逻辑不是你想要的。

此代码中有非 C++ 代码,

    if (input == "hall..." || "ass" )

在 C++ 中,我们不使用它,尽管它是有效的。它应该是

    if (input =="hall....") || input == "bbbb")

因为我认为你不会只想比较这些字符串文字的内存地址。

(我没有仔细阅读代码,感谢评论。

于 2013-08-14T22:35:11.790 回答
0

它为您输入的每个单词打印一次“你看到:一些骨头......”。如果你输入“the quick brown fox jumped over the lazy dogs”,它可能会打印“You see: ...” 9 次。所以看起来你的“cin >> input”正在将你的输入字符串分解成标记。您必须弄清楚如何让它读取整行并将其作为一个字符串提供给您;我对 C++ 太生疏了,以至于我不记得了。:-)

另外,您写道: if (input == "look table" || "look at table")

这里的问题是“看表”总是正确的,所以表达式总是正确的。你可能想要: if (input == "look table" || input == "look at table")

于 2013-08-14T22:31:58.763 回答