基于文本的游戏 - std :: string来自新手的一些问题

时间:2016-11-28 14:39:11

标签: c++ string adventure

我可能有一个非常简单的问题,但作为编程的新手,即使有多次尝试和错误,我也找不到解决方案。我正在训练我到目前为止在一个简单的基于文本的冒险游戏中学到的东西,我遇到了问题。对于第一个我正在使用字符串,我不能让它使用两个字符串if if cout一个适当的情况。

#include<iostream>
#include <string>
using namespace std;

int main ()
{
    string podpalam = "podpalam";
    string papier = "papier";
    cout << "Stoisz w wielkim ciemny pokoju. W reku trzymasz kawalek PAPIERU, \n a w kieszeni spoczywa pudelko ZAPALEK. Co robisz?" << endl;
    cin >> podpalam >> papier;
    if ( podpalam == "podpalam")
        cout << "Pokoj rozswietla sie od plomieni palacej sie kartki.";
    else
        cout << "Pomysl przez chwile. To niekoniecznie prawidlowe wyjscie." << endl;
    cout << " \nKoniec" << endl;
    return 0;
}

因为你可以看到我有两个字符串,两个字符串都不同,但只有一个被添加到if,但是你仍然需要cin另一个字符串来继续冒险,但第二个字符串可以只是一个简单的字母或符号。我尝试添加两个字符串if,但我不能。也许这是不可能的,我正在与空气战斗,但我看到像Zork这样的游戏使用了两个单词并且工作得很完美。

另一件事是,当你犯错时我不希望我的程序结束,我希望它再次重启。就像你犯了一个错误,你死了,现在你可以重新开始。真的不知道它的命令,也无法在Google或Youtube中找到答案。

3 个答案:

答案 0 :(得分:0)

首先,特别是在学习编程时,如果使用大括号,管理代码块会容易得多。它们使得更容易看出哪个行与哪个块一起(尽管你有很好的缩进)。例如:

cin >> podpalam >> papier;
if ( podpalam == "podpalam"){
    cout << "Pokoj rozswietla sie od plomieni palacej sie kartki." << endl;
}
else{
    cout << "Pomysl przez chwile. To niekoniecznie prawidlowe wyjscie." << endl;
}

cout << " \nKoniec" << endl;

其次,你的部分问题可能是你在else中有一个endl而在if中没有。将其添加到if应该有帮助,因为行尾字符会强制控制台刷新输出。如果没有一个,可能是你的字符串正在被打印,但它被保存在尚未在屏幕上显示的缓冲区中。

答案 1 :(得分:0)

我认为您正在寻找布尔值和(&amp;&amp;)运算符。这将检查语句的两个部分是否为真,如果不是,则返回false。

例如:

if(podpalm == "podpalm" && papier== "papier") ... //this code won't run unless both variables 
//are set to what you specify

另一方面(对于将来的问题),您可能需要OR(||)运算符。如果语句的任一部分为真或两个半部分都为真,则返回true。

还有其他布尔操作符,如NOT(!)和XOR(^),但您将使用&amp;&amp;和||最多的。

编辑:

如果您希望游戏像您所描述的那样重新启动,请将整个事物放在while循环中以检查条件,然后在代码中设置该条件。这是一个例子:

#include<iostream>
#include <string>
using namespace std;

int main ()
{
  bool gameOver = false;
  while(gameOver == false) { //condition is met, start loop
    string podpalam = "podpalam";
    string papier = "papier";
    cout << "Stoisz w wielkim ciemny pokoju. W reku trzymasz kawalek PAPIERU, \n a w kieszeni spoczywa pudelko ZAPALEK. Co robisz?" << endl;
    cin >> podpalam >> papier;
    if ( podpalam == "podpalam") {


 cout << "Pokoj rozswietla sie od plomieni palacej sie kartki.";
        gameOver = true; //if it receives this input, end the game
    }
    else {
        cout << "Pomysl przez chwile. To niekoniecznie prawidlowe wyjscie."   << endl;
        gameOver = false; //otherwise, keep the game going.
      }
    cout << " \nKoniec" << endl;
    return 0;
}

答案 2 :(得分:0)

  

当我犯错误时,我是不是希望我的程序结束,我想要   它重新开始。

只需将游戏的主要代码放入单独的功能中,然后在玩家做出错误的决定之后再调用它:#34;

#include<iostream>
#include <string>
using namespace std;

void game()
{
    string podpalam = "podpalam";
    string papier = "papier";
    cout << "Stoisz w wielkim ciemny pokoju. W reku trzymasz kawalek PAPIERU, \n a w kieszeni spoczywa pudelko ZAPALEK. Co robisz?" << endl;
    cin >> podpalam >> papier;
    if ( podpalam == "podpalam")
        cout << "Pokoj rozswietla sie od plomieni palacej sie kartki.";
    else
        cout << "Pomysl przez chwile. To niekoniecznie prawidlowe wyjscie." << endl;
    cout << " \nKoniec" << endl;

    //somewhere where the player made a bad decision:
    game(); //restart the game.
    return; // return from the function.
}

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

请勿尝试在main()内拨打main(),因为这是未定义的行为。