使用C++及graphics.h开发小车游戏,如何保存高分?
解决C++ graphics.h小车游戏的高分保存问题
图形模式(graphics.h)仅负责画面渲染,高分的保存与读取属于文件IO操作,和图形渲染逻辑完全独立。你可以直接用C++标准文件流实现数据的持久化存储,以下是具体实现方案:
1. 核心思路
将高分写入本地文件(文本或二进制格式),游戏启动时从文件读取历史高分,游戏结束后对比当前得分与历史高分,更新并保存新的高分。
2. 文本文件实现(简单直观)
保存高分函数
void saveHighScore(int score) { ofstream outFile("highscore.txt"); if (outFile.is_open()) { outFile << score; outFile.close(); } }
- 文件不存在时会自动创建,已存在则覆盖原有内容,默认保存在程序运行目录(与
.exe同文件夹)。
读取高分函数
int loadHighScore() { int highScore = 0; ifstream inFile("highscore.txt"); if (inFile.is_open()) { inFile >> highScore; inFile.close(); } // 首次运行无文件时,返回默认高分0 return highScore; }
游戏中的调用示例
// 假设游戏结束后,玩家当前得分存储在currentScore中 int currentScore = 1800; int savedHighScore = loadHighScore(); // 用graphics.h渲染得分信息 outtextxy(120, 220, "当前得分: "); char currentScoreBuf[20]; sprintf(currentScoreBuf, "%d", currentScore); outtextxy(220, 220, currentScoreBuf); outtextxy(120, 270, "历史高分: "); char highScoreBuf[20]; sprintf(highScoreBuf, "%d", savedHighScore); outtextxy(220, 270, highScoreBuf); // 对比并更新高分 if (currentScore > savedHighScore) { saveHighScore(currentScore); outtextxy(120, 320, "恭喜!刷新历史高分!"); }
3. 二进制文件实现(防手动修改)
如果担心玩家手动修改文本文件中的高分,可以改用二进制存储:
二进制保存
void saveHighScoreBin(int score) { ofstream outFile("highscore.bin", ios::binary); if (outFile.is_open()) { outFile.write((char*)&score, sizeof(int)); outFile.close(); } }
二进制读取
int loadHighScoreBin() { int highScore = 0; ifstream inFile("highscore.bin", ios::binary); if (inFile.is_open()) { inFile.read((char*)&highScore, sizeof(int)); inFile.close(); } return highScore; }
注意事项
- 若需指定文件存储路径,可使用绝对路径(如
"C:/game_data/highscore.txt"),Windows系统下路径需用双反斜杠\\或单斜杠/。 - 文件IO操作与
graphics.h的图形环境完全独立,无需针对图形模式做额外适配。
内容的提问来源于stack exchange,提问作者Solaiman Hossain
相关产品推荐
相关产品推荐

