粽锁粥汁,存档码是游戏中必不可少的存在。如果没有了它,也许打王者时花了一天时间升的段位在下次登陆时全部清空,又或是氪金买的皮肤又不能用了。今天,小编就教大家如何用传统C语言写一个安全性极高的游戏存档(普通玩家无法访问或修改)

首先,了解一下C语言文件读写的基本函数和格式(头文件为stdio.h)

int fprintf( FILE* stream, const char* format, [argument...]);
int fscanf( FILE* stream, const char* format, [argument...]);

这里的fprintf()函数用于向第一个参数stream中写入数据,除了第一个参数,其用法和printf()一毛一样;同理,fscanf()函数则是从stream中读取数据,与scanf()函数一样。

但是,第一个参数为FILE*类型,也就是文件指针,需要重新定义:

FILE* fp = fopen(文件名,读写模式)

fopen函数返回一个FILE*类型数值,我们将它存进fp里方便后续操作。

关于读写模式,这里先讲几种:

r:只读(如fp不存在(为NULL)则不读)

w:重写(如fp不存在则新建,存在则删除文件所有内容重写)

a:追加(如fp不存在则新建,存在则往文件最后追加内容)

这里我们用r和w就好,因为每次都会删除文件内容然后更新。

我们通常都会选择用txt文件读写来存档:

struct Player{......
}player;
void save()
{FILE* fp = fopen("存档.txt","w");fprintf(fp,"%d %d %d",player.hp,player.gold,player.lvl);fclose(fp);
}

这里,我们定义了一个名为Player的结构体,包含血量、金币、等级等。在save函数中,我们创建(或重写)了一个名为存档的txt文件,再通过第7行的fprintf函数将它们写入文件中,最后用fclose()函数关闭文件。

但是,这样有一个很明显的缺点:安全性极低,用户只要找到文件,就可以随意进行修改。于是,我们便有了用二进制文件的想法:

void save()
{FILE* fp = fopen("存档.dat","w");fprintf(fp,"%d %d %d",player.hp,player.gold,player.lvl);fclose(fp);
}

这段代码看似可行,实际上却不能成功,读取时是一堆乱码。因为在没有定义的情况下,系统默认使用文本文件的读写模式对文件进行操作。于是,在r、w和a三种基本操作模式上,又引申出了rb、wb和ab,(b:binary二进制缩写)像计算机表明 “ 我要做二进制文件的操作,别用你默认的文本文件了 ”的意思。所以,第四行应改为:

FILE* fp = fopen("存档.dat","wb");

同样的,我们再写读档时就好写了许多:

void read()
{FILE* fp = fopen("存档.dat","rb");if(fp != NULL){fscanf(fp,"%d%d%d",&player.hp,&player.gold,&player.lvl);fclose(fp);}else{printf("文件不存在!\n");exit(1);}
}

唯一不同的就是,在第四行我们多作了一个判断,避免我们写代码时先于save()函数调用read()函数,实际编写代码时,可以以此判断是不是新玩家初入游戏,决定是否显示新手教程等等,总之很实用就对了。

最后,制作不易,我又莫得粉丝,莫得赞,你懂得

拜拜~

C语言实现安全性极高的游戏存档并读档相关推荐

  1. Unity游戏存档与读档

    目前unity常见存档和读档有几种方式,也就是常见的存储数据的方式(注意存档和读档都是针对单机游戏而言的,角色信息,道具信息,关卡情况等) Unity存档的方式大概分为这两大类 图片来源自siki学院 ...

  2. 在众多编程语言中,你可知哪种语言的安全性更高,安全漏洞最少?

    编程语言之争,一直以来是开发者社区的热议问题,因为开发者喜欢证明自己所使用的编程语言占据主导地位,尤其是安全性,只不过讨论的过程往往都伴随着双方的愤怒,最后不了了之.那么,你可知在众多热门编程语言中, ...

  3. 浅谈网络支付加密安全流程思路(安全性极高)

    在阐述我的思路之前,我们先了解以下几点. 一.公网不安全 如果我们使用公网上网,我们的ip是由公网发放的.当我们并发送请求时,公网的拥有者可以在路由端设置拦截器,以此来对你向服务器发送的数据进行拦截, ...

  4. 做自己的神——极高自由度的功能游戏:我的世界

    做自己的神--极高自由度的功能游戏:我的世界 <我的世界>(英语:Minecraft),想必大家即使没有玩过也有所耳闻.这是一款沙盒游戏,最初由瑞典游戏设计师马库斯·阿列克谢·泊松单独开发 ...

  5. 用C语言实现CLI界面的魔塔游戏

    简介 本着开源的精神,我分享下我做的数据结构大作业,我当时选择的是 游戏设计题目,由于魔塔基础的机制不太复杂,所以就借着大作业设计了个简易的魔塔游戏.这是游戏界面: 以下是我当时大作业内容: 我把大作 ...

  6. android township 游戏存档备份,游戏闪退存档全没了?不要怕,可以这样备份与还原游戏存档!...

    不少朋友可能有过这样的苦恼,好不容易在第三方商店下到好玩的修改版游戏,结果玩了一阵子突然提示证书失效,游戏闪退打不开了,只能卸载重装.可是卸载后,游戏之前的存档就没了,又得耗费大量的时间重头再来,这样 ...

  7. 刷脸支付的安全性达到极高的金融级别

    刷脸支付设备依靠3D传感摄像头进行人脸识别,其内置的点阵投影仪可以投射出3万多个肉眼不可见的红外点到用户脸部,多维度.多角度在颜色.纹理.深度等数据进行高层次对比,安全性和精准性更高,识别速度更快.尽 ...

  8. KuPlay平台:安全性对区块链游戏而言,依然是第一位

    微信公众号:酷玩区块 春风得意马蹄疾,一日看尽长安花. 说这是过去多年来中国互联网游戏厂商的真实写照不为过,然而这样春风得意的"黄金时代"却在渐行渐远.近日著名游戏人称:" ...

  9. 米尔边缘AI计算盒子FZ5体验评测:一款极高性价比AI开发板

    相信大部分人都听过近几年大火的绝地求生游戏(吃鸡)里"落地成盒"的梗,形象.不失风趣,一度成为网络流行语,但是,这是贬义.而边缘AI计算盒子FZ5"落地成盒"的 ...

  10. 组装电脑配置单报价_组装电脑配置单推荐,性价比高的游戏、画图和办公全能配置电脑!...

    今天我们再议论一下一个老生常谈的组装电脑话题,生活中我们组装电脑的目的无非就是玩游戏.制图和办公需求,其实每种需求我们组装电脑时硬件选择的标准和类型是不一样的,玩游戏的电脑对CPU和显卡要求比较高,制 ...

最新文章

  1. java object finalize_Java Object finalize() 方法
  2. c语言中void跟argv,argc和argv []在C语言中
  3. yarn资源调度(网络搜集)
  4. linux内核杂记(12)-进程调度(7)
  5. 【Linux】一步一步学Linux——nm命令(250)
  6. 试论软件工程学科的交叉性_海外大学所有学科梳理(超大工程,建议收藏)-大学下的硕士一二级学科...
  7. leetcode —— 959. 由斜杠划分区域
  8. 如何启动php程序,如何第一次运行PHP程序?
  9. Pandas入门教程(二)
  10. 思科CCNA考试命令集总结
  11. python课设带报告_python实时投票系统的课设报告
  12. Java中对象的实例化
  13. Python datetime日期相减
  14. Ubuntu20.04+GTX1060+显卡驱动+CUDA11.8+cuDNN8.5.0
  15. 应用程序如何使用驱动程序
  16. 1.6Java-接口、抽象类
  17. html画布实现小球沿直线下落,js+html5实现的自由落体运动效果代码
  18. 一个对C#程序混淆加密,小巧但够用的小工具
  19. c语言怎么打开mp4格式错误,c语言怎么播放MP4?
  20. 高级语言第三次作业及答案

热门文章

  1. js、html实现断点播放视频,视频资源在localStorage中
  2. javascript初级动态效果之使用原生js实现轮播图效果
  3. 20多岁的生活方式决定了你30岁的打开方式_演讲稿
  4. iOS系统架构和常用框架
  5. python做乘法运算定律_乘法运算定律(四年级数学下册乘法运算定律)
  6. python股票量化投资刑不行_【邢不行|量化小讲堂系列10-Python量化入门】量化投资中如何处理复权、除权问题...
  7. DQN-FlappyBird项目学习
  8. 镁光闪存颗粒对照表_最全的内存颗粒编码规则说明,教你看穿内存条到底用的什么颗粒...
  9. 3DMAx Panda Directx Exporter 导出 X插件
  10. matlab程序中length()啥意思,length是什么意思