首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将文本文件添加到游戏中,以便它可以跟踪一个人的得分

如何将文本文件添加到游戏中,以便它可以跟踪一个人的得分
EN

Stack Overflow用户
提问于 2021-02-27 09:33:33
回答 1查看 35关注 0票数 0

我已经写了一段代码,可以在电脑上显示一个石头-剪刀-布的游戏。我想添加一个功能,我可以创建一个文本文件,以便存储个人的分数和计算机分数,并跟踪分数,但我不知道怎么做。提前谢谢你!

这是我的代码。

代码语言:javascript
复制
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>


using namespace std;

void rock_paper_scissors()
{
    static int userscore = 0;
    static int computerscore = 0;
    string playername;
    int userchoice;
    int computerchoice;


    

        cout << "Hello to rock-paper-scissors!\n";
        cout << "rock beats scissors, scissors beats paper and paper beats rock." << endl;
        cout << "choose 1 for rock, 2 for paper, 3 for scissors.\n";
        cout << "please enter your name." << endl;

        cin >> playername;
        cout << endl;

        cout << "Please enter your choice\n";
        cin >> userchoice;
        cout << endl;

        while (!(userchoice > 0 && userchoice <= 3))
        {
            cout << "invalid choice. please enter a number between 1 and 3\n";
            cin >> userchoice;
        }
            if (userchoice == 1)
            {
                cout << playername << " picked rock." << endl;
            }
            else if (userchoice == 2)
            {
                cout << playername << " picked paper." << endl;
            }
            else if (userchoice == 3)
            {
                cout << playername << " picked scissors." << endl;
            }
            
            
        


         computerchoice = (rand() % 3) + 1;
        if (userchoice == 1 && computerchoice == 3)
        {
            cout << playername  << " wins!" << endl;
        }
        else if (userchoice == 2 && computerchoice == 1)
        {
            cout << playername  << " wins!" << endl;
        }
        else if (userchoice == 3 && computerchoice == 2)
        {
            cout << playername  << " wins!" << endl;
        }
        else if (userchoice == computerchoice)
        {
            cout << " draw!" << endl;
        }
        else
        {
            cout << "computer wins!" << endl;
        }


        cout << "thank you for playing!\n";
        string restart;
        cout << "Would you like to play again?" << endl << "(y)es / (n)o" << endl;
        cin >> restart;
        if (restart == "y")
        {
            rock_paper_scissors();
        }









}

int main()
{
    cout << "MAIN\n";
    rock_paper_scissors();

    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-27 10:09:24

为什么需要将数据写入到文件中?在每一轮之后更新一个简单的txt文件可能很麻烦,因为您总是在程序结束时得到一个分数。我建议将rock_paper_scissors的类型更改为int,以指示玩家在单个批次中取得的分数。中间结果是不相关的。只需将游戏循环放入您的主函数中,并且不要在此处使用递归函数调用和静态函数变量。否则,玩家必须为每一单牌输入他的名字。

此外,我测试了您的代码,您必须更改您的错误处理。我输入了"rock“,程序陷入了一个无限循环”无效的选择。请输入一个介于1和3\n之间的数字“,因此不能再输入另一个条目。由于我输入的是字符串而不是整数,因此您必须重置控制台。当心最愚蠢的用户。

此外,您应该为您的程序设定种子,以避免在每个游戏中选择相同的计算机。这可以用srand(time(NULL))来完成。

最后,我使用fstream标准库将跟踪到的分数写入主函数末尾的分数文件中。

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <algorithm>    // min max
#include <fstream>      // read/write from/to files
#include <time.h>       // time


using namespace std;

int rock_paper_scissors(const std::string& playername);


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

    cout << "MAIN\n";
    cout << "Hello to rock-paper-scissors!\n";
    cout << "rock beats scissors, scissors beats paper and paper beats rock." << endl;
    cout << "choose 1 for rock, 2 for paper, 3 for scissors.\n";


    int userscore = 0;
    int computerscore = 0;
    std::string playername;
    std::string restart;

    cout << "please enter your name." << endl;
    cin >> playername;
    cout << endl;

    do
    {
        int result = rock_paper_scissors(playername);
        cout << "thank you for playing!\n";
        
        userscore += result;
        computerscore += std::max(0, 3 - 2 * result);
        
        cout << playername << "'s score: " << userscore;
        cout << "\ncomputer's score: " << computerscore;

        cout << "\nWould you like to play again?" << endl << "(y)es / (n)o" << endl;
        cin >> restart;

    } while (restart == "y");


    std::ofstream ofile;
    ofile.open("scorefile.txt");

    ofile << "Scores:\n" << playername << ": " << userscore;
    ofile << "\nComputer: " << computerscore;

    ofile.close();

    return 0;
}


int rock_paper_scissors(const std::string& playername)
{
    int userchoice;
    int computerchoice;

    cout << endl << endl;

    do {
        cout << "Please enter your choice\n";
        if (std::cin >> userchoice)
        {
            if (userchoice > 0 && userchoice <= 3)
            {
                break;
            }
            else
            {
                cout << "invalid choice. please enter a number between 1 and 3\n";
                continue;
            }
        }
        else if (!cin.bad() && !cin.eof())
        {
            // a non integer value entered
            cerr << "invalid choice. please enter a number between 1 and 3\n";
            // Reset error state
            cin.clear();
            // remove error input
            cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
        }
    } while (true);

    if (userchoice == 1)
    {
        cout << playername << " picked rock." << endl;
    }
    else if (userchoice == 2)
    {
        cout << playername << " picked paper." << endl;
    }
    else if (userchoice == 3)
    {
        cout << playername << " picked scissors." << endl;
    }



    computerchoice = (rand() % 3) + 1;
    if (userchoice == 1 && computerchoice == 3)
    {
        cout << playername << " wins!" << endl;
        return 3;
    }
    else if (userchoice == 2 && computerchoice == 1)
    {
        cout << playername << " wins!" << endl;
        return 3;
    }
    else if (userchoice == 3 && computerchoice == 2)
    {
        cout << playername << " wins!" << endl;
        return 3;
    }
    else if (userchoice == computerchoice)
    {
        cout << " draw!" << endl;
        return 1;
    }
    else
    {
        cout << "computer wins!" << endl;
        return 0;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66394789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档