Текстовая игра — std :: string несколько вопросов от новичка

У меня, вероятно, очень простая проблема, но, как новичок в программировании, я просто не могу найти решение даже с множеством попыток и ошибок. Я обучаю тому, чему научился, в простой текстовой приключенческой игре, с которой у меня проблемы. Во-первых, я использую строки, и я не могу использовать две строки в том случае, если для правильной ситуации.

#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 добавляется только одна, но вам все равно нужно добавить еще одну строку, чтобы продвинуться вперед в приключении, но вторая строка может быть просто буквой или символом. Я попытался добавить две строки в if, но я просто не могу. Может быть, это невозможно, и я борюсь с воздухом, но я видел такие игры, как Zork, которые использовали два слова и работали идеально.

Другое дело, что я не хочу, чтобы моя программа заканчивалась, когда вы совершаете ошибку, я хочу, чтобы она снова запускалась. Как будто вы ошиблись, вы умерли, и теперь вы можете начать все заново. Не знаю команду для этого и не смог найти ответ в Google или Youtube.

2

Решение

Для начинающих, особенно когда вы изучаете программирование, вам будет намного легче управлять блоками кода, если вы используете фигурные скобки. С их помощью намного легче увидеть, какие строки идут с каким блоком (хотя у вас есть хороший отступ). Пример:

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;

Во-вторых, частью вашей проблемы может быть то, что у вас есть endl в другом, а не в if. Добавление этого в if должно помочь, потому что символы конца строки заставляют консоль сбрасывать вывод. Без него может быть, что ваша строка печатается, но она хранится в буфере, который еще не отображался на экране.

0

Другие решения

Я думаю, что вы ищете логическое и (&&) оператор. Это проверяет, что обе части утверждения верны, и возвращает ложь, если это не так.

Например:

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

С другой стороны (для будущих проблем) вам может понадобиться оператор ИЛИ (||). Это вернет true, если какая-либо часть утверждения верна или если обе половины верны.

Есть и другие булевы операторы, такие как NOT (!) И XOR (^), но вы будете использовать && и || большинство.

РЕДАКТИРОВАТЬ:

Если вы хотите, чтобы игра перезапускалась, как вы описали, поместите все это в цикл 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;
}
0

Разве я не хочу, чтобы моя программа заканчивалась, когда ты ошибаешься?
это перезапустить снова.

Просто поместите основной код вашей игры в отдельную функцию, а затем вызывайте ее, как только игрок примет «плохое решение»:

#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() потому что это неопределенное поведение.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector