从文本文件(C+;+;)构建字符矩阵 对于我的项目,我必须在C++中进行一个游戏。我们的老师选了一个叫Squadro的棋盘游戏。为了快速解释,我们有一个有49个盒子和10个棋子的棋盘,5个红色和5个黄色。在每一个回合,玩家必须移动他们的棋子等

从文本文件(C+;+;)构建字符矩阵 对于我的项目,我必须在C++中进行一个游戏。我们的老师选了一个叫Squadro的棋盘游戏。为了快速解释,我们有一个有49个盒子和10个棋子的棋盘,5个红色和5个黄色。在每一个回合,玩家必须移动他们的棋子等,c++,file,text,game-development,C++,File,Text,Game Development,开始时,游戏如下所示: char game[7][7] = { {' ',' ',' ',' ',' ',' ',' '}, {'>',' ',' ',' ',' ',' ',' '}, {'>',' ',' ',' ',' ',' ',' '}, {'>',' ',' ',' ',' ',' ',' '},

开始时,游戏如下所示:

 char game[7][7] = {

                    {' ',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {' ','A','A','A','A','A',' '}

                };

如果你想了解更多关于这个游戏的信息,请点击以下链接:(法语,但我想你会理解的)。但问题不在这里。我已经用SFML等做了一个GUI。我们必须实现更多的功能性。事实上,我们必须让用户保存他们的游戏或不保存。我通过在一个文本文件中写下日期、玩家姓名和游戏的“矩阵”来做到这一点。我的问题是:启动一个游戏。我想这可能不难,但我尝试了很多想法。那么我需要什么来解决我的问题呢?我必须打开名为“saves.txt”的文本文件(已经完成)并获取有用的数据:获取游戏日期、玩家姓名并构建矩阵,最后我可以启动游戏。为了帮助我完成这项任务,我将与您分享我已经完成的工作以及我的saves.txt的外观

谢谢你的帮助

当前my saves.txt看起来像:

保存游戏的我的代码:

else if(event.key.code == sf::Keyboard::Escape) //if the user press escape it will close the SFML Window
        {
            window.close();

            system("cls");
            cout << "Wanna save the game? " << endl;
            string choice;
            cin >> choice;

            if((choice == "yes") || (choice == "Yes") || (choice == "YES"))
                    {
                        //Get date and current time
                        time_t tt;
                        struct tm * ti;
                        time (&tt);
                        ti = localtime(&tt);

                        cout << asctime(ti) << endl;

                        //Opening the file
                        string const File("saves.txt");
                        ofstream Flux(File.c_str(), ios::app);

                        Flux << "----------------------------------------------------" << endl;
                        Flux << "date  " << asctime(ti)  << endl;
                        Flux << "Type of game : two players" << endl;
                        Flux << "currentPlayer : " << currentPlayer << endl;
                        Flux << "waitingPlayer : " << waitingPlayer << endl;
                        cout << endl;

                        if(Flux)
                        {

                            for(int u=0; u < 7; u++)
                            {
                                for(int v=0; v < 7; v++)
                                {
                                    if(game[u][v] != ' ')
                                    {

                                        Flux << game[u][v] << " line : " << u << " | column :" << v << endl;

                                    }
                                }
                                cout << endl;
                            }

                            Flux << "\n----------------------------------------------------" << endl;

                        }
                        else
                        {
                            cerr << "ERROR : Impossible to save the game ! " << endl;
                        }

                    }
                    else
                    {
                        exit(0);
                    }

假设您知道保存文件的格式,并且该格式不变,您可以解析每一行并保存所需的项目。要解析一行,您可以使用strtok之类的工具,也可以像这样执行您自己的解析函数(仅通过空格分隔符分隔字符串项):

静态向量getLineParts(字符串行)
{
向量部分列表;
int length=line.length();
字符串temp=“”;
for(int i=0;i

您可以分别调用getline五次以获取标题信息,然后通过循环获取工件位置。游戏数组可以初始化为所有的空(“”),然后当你得到每个棋子的位置时,你可以把它们放在游戏数组中相应的位置。

不相关(可能):嘿,信息是它不相关。在添加我的vector dateGame之前,它工作得非常好。
//它不工作
没什么好做的。这可能意味着你的电脑长出了腿,吃掉了你的房子。幸运的是,我已经弄明白了“上下文”的含义。我花了几十年时间,但这是值得的
search[i]
是一个
char
但是
dateGame.push_back(search[i])
想要一个
std::string
。哦,我明白了(我不得不承认这是一个很大的错误)。但是我该怎么做呢?我必须把解决方案留给那些知道你想做什么的人。我可以帮助您消除编译器错误,但从长远来看,这对您没有任何好处。注意:使用
std::istringstream
可以更轻松地拆分空白字符串。例如
std::istringstream(行);字符串字;while(stream>>word){partslList.push_back(word);}
 char game[7][7] = {

                    {' ',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {'>',' ',' ',' ',' ',' ',' '},
                    {' ','A','A','A','A','A',' '}

                };
static vector<string> getLineParts(string line)
{
    vector<string> partsList;
    int length = line.length();
    string temp = "";
    for (int i = 0; i < length; i++)
    {
        if (line[i] != ' ')
        {
            temp += line[i];
        }
        else
        {
            partsList.push_back(temp);
            temp = "";
        }
    }
    partsList.push_back(temp);

    return partsList;
}