gpt4 book ai didi

C++ 控制台保存并加载保存的 "games"

转载 作者:行者123 更新时间:2023-11-27 23:54:37 25 4
gpt4 key购买 nike

我有一个随机生成的数字网格,大小为 gameSizexgameSize(用户输入),包含在 vector 的 vector 中。用户可以输入两个坐标 (x, y),以便将网格内的数字更改为预定义的值。

例如,用户输入 X:0 Y:0 和:

{9, 7, 9}

{9, 6, 8}

{5, 1, 4}

变成:

{0, 7, 9} <-- Changes position 0,0 to 0 (the predefined value)

{9, 6, 8}

{5, 1, 4}

我正在尝试弄清楚如何制作它,以便用户可以保存当前的板状态并在以后访问它。我知道我需要以某种方式将游戏 (myGame) 保存到一个文件中,这样我就可以访问它并将其再次加载到控制台应用程序中,本质上是保存并重新启动保存的游戏,但我不知道从哪里开始。

最佳答案

您可以使用标准库中的 fstream 并将特殊方法添加到您的游戏类中,这里是工作示例:

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

using namespace std;

class Game
{
public:
Game(int gameSize) : size(gameSize), field(size, vector<int>(size))
{
//Randomize(); //generate random numbers
//just filling example for test
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
field[i][j] = i * size + j;
}
}
}

Game(string filename) {
Load(filename);
}

void Load(string filename) {
fstream in;
in.open(filename, fstream::in);
in >> size;
field.resize(size, vector<int>(size));
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
in >> field[i][j];
}
}
in.close();
}

void Save(string filename) {
fstream out;
out.open(filename, fstream::out);
out << size << endl;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
out << field[i][j] << " ";
}
out << endl; //for user friendly look of file
}
out.close();
}

private:
int size;
vector<vector<int>> field;
};

int main() {
Game game(3);
game.Save("game.txt");
game.Load("game.txt");
game.Save("game2.txt");

return 0;
}

不要忘记将游戏大小存储在文件中以方便阅读。如果您想加载已存储的游戏,最好将 size 属性添加到您的类并使用另一个构造函数。如果您添加一些检查文件是否采用适当的格式,那会更好。如果它们还不存在,您可以将所有制作逻辑作为方法添加到 Game 类中。祝你好运!

关于C++ 控制台保存并加载保存的 "games",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com