【发布时间】:2020-12-28 11:20:51
【问题描述】:
大多数(如果不是全部)游戏会记住您所拥有的东西(金钱、村庄规模、经理数量等),因此当您重新开始游戏时,您仍然拥有上次离开时所获得的一切.我正在编写一个需要记住值的游戏,我最初在程序开始时声明它们。但是由于money等于0,所以每次用户回来玩游戏时,他们的收入都会被重置。
我的大部分变量最终都需要这个,但我正在积极处理Tutorial();。我需要教程只运行一次,所以我需要程序在每次程序开始时检查用户是否完成了教程。我尝试设置一个名为 isTutorialCompleted 的布尔值,并在我运行我的函数时让它在 main 中检查它。代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//Game Variables
int money = 0;
string existingManagers = { "Benny, Rachel, Barnes, Flora, Gregory" };
string createManager = "";
vector<string> createdManagers {""};
bool isTutorialCompleted = false;
void initApp () {
}
void Tutorial() {
cout << "Please Enter your name" << "\n";
cin >> createManager;
createdManagers.push_back(createManager);
cout << "\n" << "You have created Manager " << createManager;
}
int main() {
initApp();
if (isTutorialCompleted == false) {
Tutorial();
}
}
这不起作用,因为每次我重新启动程序时,布尔值都会重置,所以我尝试使布尔值最初未定义,然后在教程中更改它。代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//Game Variables
int money = 0;
string existingManagers = { "Benny, Rachel, Barnes, Flora, Gregory" };
string createManager = "";
vector<string> createdManagers {""};
bool isTutorialCompleted;
void initApp () {
}
void Tutorial() {
isTutorialCompleted = false;
cout << "Please Enter your name" << "\n";
cin >> createManager;
createdManagers.push_back(createManager);
cout << "\n" << "You have created Manager " << createManager;
isTutorialCompleted = true;
}
int main() {
initApp();
Tutorial();
}
这样做的问题是它不会保持价值。 isTutorialCompleted 会回到程序中的 undefined 并最终在教程开始时变为 false。最后,我尝试检查initApp(); 中的布尔值。代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//Game Variables
int money = 0;
string existingManagers = { "Benny, Rachel, Barnes, Flora, Gregory" };
string createManager = "";
vector<string> createdManagers {""};
bool isTutorialCompleted;
void initApp () {
//Check if tutorial is completed
if (isTutorialCompleted = true) {
Tutorial();
}
}
void Tutorial() {
cout << "Please Enter your name" << "\n";
cin >> createManager;
createdManagers.push_back(createManager);
cout << "\n" << "You have created Manager " << createManager;
isTutorialCompleted = true;
}
int main() {
initApp();
}
所以最终的问题是:如何永久存储一个变量,以便在重新启动程序时,存储的变量不会重置?
【问题讨论】:
-
它不会只是从代码本身中保存。您需要将其存储在非易失性的地方。对于大多数游戏来说,这是一个保存文件。您创建一个文件并将这些值写入文件。然后,当您重新加载从所述文件中读取的游戏时,如果其中有值,请使用它们。
-
欢迎来到 Stack Overflow。答案是“写一个文件”,应该是你用来学习C++的课文中的一章。如果没有,只需搜索“C++ 文件 I/O”。更根本的是,当你实现新功能时,尽可能孤立地去做,上面的大部分代码与问题无关,不属于这里。
-
@Beta 非常感谢!我应该知道我将不得不写入文件。我想我希望我能解决这个问题。是的,我在争论是保留整个代码还是删除无关紧要的部分。我想我应该删除那些部分。
-
@Delta_G 也谢谢!
-
谷歌序列化。那应该给你一些想法。我自己用过 sqlite。
标签: c++ boolean 2d-games permanent