将游戏的高分保存到文件然后访问它们,如何?
Posted
技术标签:
【中文标题】将游戏的高分保存到文件然后访问它们,如何?【英文标题】:Saving high scores of a game to a file and then accessing them, how? 【发布时间】:2021-06-01 19:34:24 【问题描述】:我想将我的游戏(一个简单的蛇游戏)的所有分数保存到一个文件中,然后读取所有分数。问题是,我不知道如何保存它们,不知道会有多少。
Example:
one person plays it, gets 1200 score, it gets saved;
2nd person plays it, gets 1000 and sees the first person's score;
3rd person plays, gets 1100 and sees the 1st and 2nd scores.
我已经用一个数组完成了它,但并没有像我想要的那样工作。
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream f("score.dat");
ofstream g("score.dat");
int comp(const void* e1, const void* e2)
int f = *((int*)e1);
int s = *((int*)e2);
if(f>s) return 1;
if(f<s) return -1;
return 0;
int main()
int k=0;
int n, x;
cin >> n;
int* v = new int[n];
for(int i=0; i<n; i++)
cin >> v[i];
for(int i=0; i<n; i++)
qsort(v, n, sizeof(int), comp);
g << v[i] << endl;
while(f >> x)
k++;
cout << k << ". " << x << endl;
return 0;
【问题讨论】:
您是否关心让文件同时和永久打开以进行读取和写入的具体原因,而我们没有看到在你的样本中?还是将这两个流作为全局变量打开是一个有点武断的决定? 我对文件工作没有真正的经验,所以如果你知道更好的解决方法,请分享:D @Frank 我只关心是否能够保存每个人演奏的所有分数,然后在调用函数后对其进行排序和显示 @MickeyMoise --qsort(v, n, sizeof(int), comp);
-- qsort
在 C++ 程序中?一个简单的std::sort(v, v + n);
就可以完成所有这些工作。
【参考方案1】:
根据你的描述,你想要的是:
-
打开文件写入
写入文件
完成写入文件
打开文件进行阅读
从文件中读取
从文件中读取完成。
所以你的代码应该反映这个顺序!
关键是您在任何给定时刻都只是从文件中读取或写入,因此ifstream
和ofstream
绝不应该同时存在!
有几种方法可以解决这个问题,但最简单的方法是使用函数来隔离它们。以下是您的情况:
void writeScoresToFile(int[] scores, int num_scores)
// g only starts existing when the function is called
ofstream g("score.dat");
for(int i = 0; i < num_scores; ++i )
g<< v[i] << endl;
// g is destroyed. This closes the file
void readScoresFromFile()
// f only starts existing when the function is called
ifstream f("score.dat");
int x = 0;
int k = 0;
while(f>> x)
k++;
cout << k << ". " << x << endl;
// f is destroyed. This closes the file
int main()
int n;
cin >> n;
int* v = new int[n];
// ...
// You only need to sort once, not inside the loop.
std::sort(v, v + n);
writeScoresToFile(v, n);
readScoresFromFile()
delete[] n; // <----- if there's a new, there must be a delete.
return 0;
顺便说一句,您的代码在许多其他方面也可能会更好,但我有意保持原样(除了客观上损坏的东西),以便您可以专注于该特定部分:
【讨论】:
仍然,我怎么做,所以我输入 1 个分数,关闭控制台,编译器(代码块),重新打开编译器,重新运行程序并输入另一个分数并将其添加到文件中而不一个数组? 您能否举个例子来修改您的答案,因为我在过去 15 分钟里一直在苦苦挣扎,无法弄清楚以上是关于将游戏的高分保存到文件然后访问它们,如何?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 cocos2d iphone 游戏中保存高分和加载高分