#include<iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
char wordOne[5][9] = { {"elephant"},
{"imperial"},
{"absolute"},
{"absinthe"},
{"computer"} };
char hangman[9] = {"********"};
char guess;
int r;
srand( time(0));
r = rand()%5;
wordOne[r];
cout << "Guess the secret eight letter word before you run out of guesses! Go: " << endl;
for (int x = 0; x < 8; ++x)
cout << hangman[x] << endl;
cin >> guess;
while (hangman[0] == '*' || hangman[1] == '*' || hangman[2] == '*' || hangman[3] == '*' || hangman[4] == '*' || hangman[5] == '*' || hangman[6] == '*' || hangman[7] == '*')
{
cout << "Guess the secret eight letter word before you run out of guesses! Go: ";
for(int x = 0; x < 8; ++x)
cout << hangman[x];
cout << endl;
cin >> guess;
for(int x = 0; x < 8; ++x)
{
if (wordOne[hangman[x]][x] == guess)
{
hangman[x] = guess;
}
}
for(int x = 0; x < 8; ++x)
cout << hangman[x] << endl;
}
system("PAUSE");
return 0;
}
Для проекта нам было предложено создать одномерный массив, который отображает только звездочки. Затем, используя двумерный массив, сохраните 5 разных 8-буквенных слов. Предполагается, что программа выбирает один случайным образом, а затем пользователь вводит случайные буквы, пытаясь угадать слово. Это по существу репликация палача. Как предполагают письма, звездочка должна быть заменена правильной буквой. Например, если слово было слоном, и сначала было угадано, программа затем отобразила e *** и так далее. Я получил программу для компиляции, но я не могу понять, как изменить код, чтобы заменить звездочки и программа работает правильно. Любая обратная связь будет высоко оценена.
wordOne[hangman[x]][x]
let say x = 1
это будет wordOne['*'][1]
в коде wordOne['*'][1]
. wordOne[r][x] == guess
это не должно быть wordOne[r][x] == guess
? Я добавил int
чтобы отслеживать количество догадок и добавил проверку в цикле while, чтобы узнать, угадал ли пользователь максимальное количество раз.
#include<iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
char wordOne[5][9] = { {"elephant"},
{"imperial"},
{"absolute"},
{"absinthe"},
{"computer"} };
char hangman[9] = {"********"};
char guess;
int r;
srand( time(0));
r = rand()%5;
wordOne[r];
int numGuesses = 10;
cout << "Guess the secret eight letter word before you run out of guesses! Go: " << endl;
for (int x = 0; x < 8; ++x)
{
cout << hangman[x] << endl;
}
while (numGuesses > 0 && (hangman[0] == '*' || hangman[1] == '*' || hangman[2] == '*' || hangman[3] == '*' || hangman[4] == '*' || hangman[5] == '*' || hangman[6] == '*' || hangman[7] == '*'))
{
cout << "Guess the secret eight letter word before you run out of guesses! Go: ";
for(int x = 0; x < 8; ++x)
{
cout << hangman[x];
}
cout << endl;
cin >> guess;
--numGuesses;
for(int x = 0; x < 8; ++x)
{
if (wordOne[r][x] == guess)
{
hangman[x] = guess;
}
}
for(int x = 0; x < 8; ++x)
{
cout << hangman[x] << endl;
}
}
system("PAUSE");
return 0;
}
Измените wordOne[hangman[x]][x]
на wordOne[r][x]
. Кроме того, я бы рекомендовал не печатать endl
in for loop, поскольку он печатает каждый символ в другой строке.
wordOne[hangman[x]][x]
скажем,x = 1
в коде это будет равнозначноwordOne['*'][1]
.wordOne[r][x] == guess
это не должно бытьwordOne[r][x] == guess
? Кроме того, у вас должен быть массив уже угаданных букв для проверки, чтобы пользователь не мог просто продолжать вводить уже угаданные буквы.if (wordOne[hangman]...
,if (wordOne[hangman]...
выглядит неправильно. Попробуйтеif (wordOne[r][x] == guess)
.