玩记分游戏时,有时希望看到历史最高分
思路
- 游戏开始,打开最高分存储文件(区分存在和不存在两种情况)
- 读取文件内容并存储在变量中(一串数字),关闭文件
- 游戏中及时更新
- 游戏结束,打开最高分文件并写入新的最高分,关闭文件
一些准备工作
- IDE: VC++6.0
- 了解可能用到的特殊函数: fopen(),fclose(),fscanf(),fprintf()
- 注意:
- 文件打开异常的处理(以只读方式r打开不存在的文件会出错)
- 用什么函数来读取写入数据(处理数字)
开始写代码
- 预处理指令:
# include <stdio.h>
- 主函数:
int main(void)
{
int highscore = 0; //存储最高分
int score = 0; //当前次,游戏得分
//获取历史最高分
getHighScore(&highscore);
printf("Original high score: %d\n", highscore);
//假装:游戏中,追踪最高分
printf("->Start game!\n");
score = 99;
if (score > highscore)
highscore = score;
printf("->SJL, you win!\n");
//存入当前最高分
printf("New high score: %d\n", highscore);
storeHighScore(highscore);
return 0;
}
- 获取最高分函数:getHighScore():
//如果把此函数写在main函数后面,记得在main函数前面某行处,加上函数声明!
void getHighScore(int * highscore)
{
FILE * fp = NULL; //文件指针,指向成功打开的文件
//打开文件,以只读的方式r
fp = fopen("highscore.txt","r");
//如果文件不存在,打开文件,以写入的方式w
if (fp == NULL)
{
fp = fopen("highscore.txt","w");
fprintf(fp, "%-10d", *highscore);
}
else
fscanf(fp, "%10d", highscore);
//关闭文件
fclose(fp);
}
- 存入当前最高分函数:storeHighScore():
//如果把此函数写在main函数后面,记得在main函数前面某行处,加上函数声明!
void storeHighScore(int highscore)
{
FILE * fp = NULL;
fp = fopen("highscore.txt","w");
fprintf(fp, "%-10d", highscore);
fclose(fp);
}
- 编译链接运行:
扩展
-
考虑一下:
- 如果是记录前10个玩家的最高分(10行数字),又怎么处理?
- 如果是处理字符,而不是数字,该怎么做?
- 以不同的方式打开文件,可以用什么函数,把数据读取或写入文件?
- emmmm,暂时只想到这么多……
-
总结:
- 目标。 用C语言实现用文件记录最高分的功能
- 准备工作。 主要是了解文件相关的函数有哪些,怎么用
- 写查改。 开始撸代码,完成预想的功能
最后
水平不高,可能还有做得不够好的地方,
希望能和大家交流学习,
转载请注明出处。