У меня есть игра hangman, которую я создаю, и мне нужна помощь, чтобы выяснить, почему она не работает полностью

#c

#c

Вопрос:

Я создаю игру hangman на C и я близок к завершению, однако у меня есть одна серьезная проблема. Я должен заставить игру разрешить пользователю только 4 предположения, но моя программа не регистрирует правильное количество предположений.

Я попытался изменить переменные, а также условия в операторах if и else, касающиеся угадывания.

 #include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
cout << "Welcome to hangman!" << endl;

char choice = 'y';

while (choice == 'y') {
    string word;
    cout << "Enter a word to guess: ";
    getline(cin, word);

    if (word.empty()) {
        cout << "The word should not be blank.n";
        continue;
    }

    bool contain_space = false;
    for (char c : word) {
        if (isspace(c)) {
            contain_space = true;
            break;
        }
    }

    if (contain_space) {
        cout << "The word cannot contain spaces.n";
        continue;
    }

    vector <bool> index;
    for (int i = 0; i < word.size(); i  ) {
        index.push_back(false);
    }

    **int guess_correct = 0;**
    int guess_wrong = 4;
    char letter;

    while (guess_wrong >= 0 amp;amp; guess_correct < word.size()) {
        bool valid_guess = true;
        cout << "Guess a letter." << endl;
        cin >> letter;
        for (int i = 0;i < word.size(); i  ) {
            if (word[i] == letter) {
                valid_guess = true;
                index[i] = true;
                guess_correct  ;
                break;

            }
            else {
                guess_wrong = guess_wrong - 1;
            }

        }

        for (int i = 0; i < word.size(); i  ) {
            if (index[i] == true) {
                cout << word[i] << "t";
            }
            else {
                cout << "___t";
            }
        }
        cout << endl;
    }


    cout << "Would you like to play again? (y/n)" << endl;
    cin >> choice;
    cin.ignore();
}
return 0;
}
  

Черные галочки показывают начало раздела кода, на котором я застрял. Каждый раз, когда я запускаю ее, она позволяет мне проходить игру с правильными предположениями, но неправильные предположения не допускают 4.

Комментарии:

1. bool valid_guess = true; вы, вероятно, хотите вместо этого инициализировать это значением false. И если оно по-прежнему равно false после вашего for (int i = 0;i < word.size(); i ) { } тогда и только тогда уменьшите guess_wrong

Ответ №1:

Вы уменьшаете значение guess_wrong для каждой буквы в слове, которая не совпадает, ни разу для «полного предположения».

вы, вероятно, хотите вывести guess_wrong = guess_wrong - 1; // aka guess_wrong-- из цикла for и делать только это if (!valid_guess) .