Как мне заставить этот код палача работать с wxDev-C ++? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть проект Палача, готовящийся как инструкция C ++ от нашего профессора. Для этого я получил помощь от YouTube (спасибо NVitanovic) и основал ее на своей игре в палач на C ++.

После выполнения кода в visual studio читатель ifstream (путь); часть кода, которая ищет файл words.txt и загружает случайное слово из него, вместо этого показывает ошибку, которая не позволяет мне скомпилировать код в wxDev, однако он прекрасно компилируется в visual studio. Есть ли какой-то заголовок, который мне не хватает, или мне следует поискать путь в целом? Ниже весь код:

#include <iostream>
#include <cstdlib>
#include <vector>
#include <fstream>
#include <string>
#include <time.h>

using namespace std;

void sign(string message, bool printTop = true, bool printBottom = true) {
    if (printTop) {
        cout << "+---------------------------------+" << endl;
        cout << "|";
    }
    else {
        cout << "|";
    }

    bool front = true;
    for (int i = message.length(); i < 33; i++) {
        if (front) {
            message = " " + message;
        }
        else {
            message = message + " ";
        }
        front = !front;
    }
    cout << message.c_str();

    if (printBottom) {
        cout << "|" << endl;
        cout << "+---------------------------------+" << endl;
    }
    else {
        cout << "|" << endl;
    }
}

void hangman(int guess = 0) {
    if (guess >= 1) {
        sign("|", false, false);
    }
    else {
        sign("", false, false);
    }

    if (guess >= 2) {
        sign("|", false, false);
    }
    else {
        sign("", false, false);
    }

    if (guess >= 3) {
        sign("O", false, false);
    }
    else {
        sign("", false, false);
    }

    if (guess >= 4) {
        sign("/|\\", false, false);
    }
    else {
        sign("", false, false);
    }

    if (guess >= 5) {
        sign("|", false, false);
        sign("/ \\", false, false);
    }
    else {
        sign("", false, false);
        sign("", false, false);
    }

    if (guess >= 6) {
        sign("+---------+", false, false);
        sign("|         |", false, false);
    }
    else {
        sign("", false, false);
        sign("", false, false);
    }
}

void showLetters(string input, char from, char to) {
    string s;

    for (char i = from; i <= to; i++) {
        if (input.find(i) == string::npos) {
            s += i;
            s += " ";
        }
        else {
            s += "  ";
            //Two spaces to fix the padding between the letters.
        }
    }

    sign(s, false, false);

}

void availableLetters(string taken) {
    showLetters(taken, 'A', 'M');
    showLetters(taken, 'N', 'Z');
}

bool wordWin(string word, string guessed) {
    bool won = true;

    string s;

    for (int i = 0; i < word.length(); i++) {
        if (guessed.find(word[i]) == string::npos) {
            won = false;
            s += "_ ";
        }
        else {
            s += word[i];
            s += " ";
        }
    }
    sign(s, false);
    return won;
}

string getWord(string path) {
    int lineCount = 0; 
    string word; 
    vector<string> v; 

    ifstream reader(path);

    if (reader.is_open()) {
        while (std::getline(reader, word)) {
            v.push_back(word);
        }

        int randomLine = rand() % v.size();
        //This will set the range from 0 to the number of lines.

        word = v.at(randomLine);
        reader.close();
    }
    return word;
}

int main() {
    srand(time(0));

    string mistakes = "";
    string guessWord;

    guessWord = getWord("words.txt");

    cout << guessWord << endl << endl;

    sign("HANG MAN");

    hangman(6);

    sign("AVAILABLE LETTERS");

    availableLetters(mistakes);

    sign("WORD TO GUESS");

    wordWin(guessWord, mistakes);

    cout << endl;
    system("pause");
    return 0;
}

Ниже приведен сегмент ошибки поиска пути:

string getWord(string path) {
    int lineCount = 0; 
    string word; 
    vector<string> v; 

    ifstream reader(path);

    if (reader.is_open()) {
        while (std::getline(reader, word)) {
            v.push_back(word);
        }

        int randomLine = rand() % v.size();
        //This will set the range from 0 to the number of lines.

        word = v.at(randomLine);
        reader.close();
    }
    return word;
}

Заранее большое спасибо!

1 Ответ

0 голосов
/ 27 марта 2019

Редактировать: Неважно, я нашел проблему самостоятельно, и мне просто пришлось изменить "путь" в коде ifstream reader(path); на words.txt.Я оставлю это здесь, хотя для других в будущем: D

...