【问题标题】:reading and writing file for a game为游戏读写文件
【发布时间】:2019-04-19 13:46:46
【问题描述】:

我正在制作一个随机初始化字母(例如 B A S T E N)的游戏,用户将仅使用这些字母输入尽可能多的单词。我有一个文件,其中包含正确的单词及其对应点。我的问题是如何防止用户一遍又一遍地使用相同的词?

我正在尝试使用 ofstream,这样每当用户输入正确的单词时,它就会被添加到空白文件中

void start()
{
    char ch;
    do {
        clrscr();
        long* newptr = 0;
        time_t start = time(newptr);
        char arr[10][50] = {" B A N S E T ", " R E D G A E ", " S A H L E S ", " P R G N I S ",
                            " A L E R L Y ", " L A C S A U ", " A C Q U K Y ", " M B L U E J ",
                            " Z E D Z U B ", " L E A Z D Z "};
        int i = 0, sum, x;
        while (i != 2) {
            clrscr();
            sum = 0;
            do {
                clrscr();
                cout << "\t**********************************************\n";
                cout << "\t*             W O R D  S E E K E R           *\n";
                cout << "\t**********************************************\n";
                cout << "\n\t\t\t\t\t SCORE: " << sum << " /50 pts"
                     << "\n                  ******************************\n";
                cout << "                  *       " << arr[i] << "        *\n";
                cout << "                  ******************************\n\n";
                cout << " 6 letter=10pts, 5 letter=8pts, 4 letters=6pts, 3 letter=4pts\n\n";
                char a[20], b[20];
                int c;

                // this is where I have my problem
                if (i == 0) {
                    ifstream fin;
                    fin.open("lvl1.txt");
                    if (fin.fail()) {
                        cout << "File doesn't exist!";
                        exit(1);
                    }
                    ofstream fout;
                    fout.open("trial.txt");
                    if (fout.fail()) {
                        cout << "Output file opening failed.\n";
                    }
                    cout << "\tEnter word: ";
                    cin >> a;

                    do {
                        fout << a;
                        fin >> b >> c;
                        if (fin.eof() == 1) {
                            cout << "Incorrect! Try Again!";
                            delay(1000);
                            exit(1);
                        }
                    } while (strcmp(a, b) != 0);
                    fin.close();
                    if (strcmp(a, b) == 0) {
                        sum += c;
                    }
                }
            } while (sum < 50);
            i++;
        }
        x = time(newptr) - start;
        cout << "\n\tGood Job! Your time is " << x << " seconds\n";
        cout << "\tDo you want to continue?(Y/N): ";
        cin >> ch;
    } while (ch != 'n' || ch != 'N');
}

【问题讨论】:

  • 请以可读的格式展示您的代码。我不会阅读你的混乱代码。每行一个语句,适当的缩进,等等。甚至还有一些程序可以为您进行格式化。使用它们。
  • @RolandIllig 我已经编辑了 ifstream 和 ofstream 所在的部分,如果是一团糟,抱歉。
  • 我为你运行了 clang-format。如果您自己没有使用 clang-format,那么您可以(将来)为此使用 online service
  • @NikosC。非常感谢,抱歉我还是个菜鸟。

标签: c++ fstream ifstream ofstream turbo-c++


【解决方案1】:

一个问题是您是否想在运行时或程序结束后记住单词。

要在程序结束后记住单词,请将它们写入文件。

要记住用户在运行时输入的单词,请使用容器,例如std::vector。将单词附加到容器中,然后对容器进行排序。您可以在追加之前使用std::binary_search 在容器中查找单词。

【讨论】:

  • 最好是后者,这样我就不需要每次新用户尝试播放时都从文件中删除单词。另外我忘了告诉你我只允许使用 turbo c++ 它是用于一个项目
  • 问你的导师为什么你必须使用 Turbo C++,一个非常老的编译器,当你可以免费下载一个现代的免费编译器时(或者使用一个在线编译器来做小项目) .学校真的需要改变它的课程。
  • 一个很好的匹配手头的问题是std::unordered_set而不是std::vector
  • 如果没有std::vector,则需要自己写。动态分配一个大小为 N 的数组。当数组满时,分配一个新的、更大的数组;将旧数组复制到新数组,然后删除旧数组。
  • 另一个建议是编写自己的链表并使用插入排序的单词。
猜你喜欢
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多