C语言实现安全性极高的游戏存档并读档
粽锁粥汁,存档码是游戏中必不可少的存在。如果没有了它,也许打王者时花了一天时间升的段位在下次登陆时全部清空,又或是氪金买的皮肤又不能用了。今天,小编就教大家如何用传统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语言实现安全性极高的游戏存档并读档相关推荐
- Unity游戏存档与读档
目前unity常见存档和读档有几种方式,也就是常见的存储数据的方式(注意存档和读档都是针对单机游戏而言的,角色信息,道具信息,关卡情况等) Unity存档的方式大概分为这两大类 图片来源自siki学院 ...
- 在众多编程语言中,你可知哪种语言的安全性更高,安全漏洞最少?
编程语言之争,一直以来是开发者社区的热议问题,因为开发者喜欢证明自己所使用的编程语言占据主导地位,尤其是安全性,只不过讨论的过程往往都伴随着双方的愤怒,最后不了了之.那么,你可知在众多热门编程语言中, ...
- 浅谈网络支付加密安全流程思路(安全性极高)
在阐述我的思路之前,我们先了解以下几点. 一.公网不安全 如果我们使用公网上网,我们的ip是由公网发放的.当我们并发送请求时,公网的拥有者可以在路由端设置拦截器,以此来对你向服务器发送的数据进行拦截, ...
- 做自己的神——极高自由度的功能游戏:我的世界
做自己的神--极高自由度的功能游戏:我的世界 <我的世界>(英语:Minecraft),想必大家即使没有玩过也有所耳闻.这是一款沙盒游戏,最初由瑞典游戏设计师马库斯·阿列克谢·泊松单独开发 ...
- 用C语言实现CLI界面的魔塔游戏
简介 本着开源的精神,我分享下我做的数据结构大作业,我当时选择的是 游戏设计题目,由于魔塔基础的机制不太复杂,所以就借着大作业设计了个简易的魔塔游戏.这是游戏界面: 以下是我当时大作业内容: 我把大作 ...
- android township 游戏存档备份,游戏闪退存档全没了?不要怕,可以这样备份与还原游戏存档!...
不少朋友可能有过这样的苦恼,好不容易在第三方商店下到好玩的修改版游戏,结果玩了一阵子突然提示证书失效,游戏闪退打不开了,只能卸载重装.可是卸载后,游戏之前的存档就没了,又得耗费大量的时间重头再来,这样 ...
- 刷脸支付的安全性达到极高的金融级别
刷脸支付设备依靠3D传感摄像头进行人脸识别,其内置的点阵投影仪可以投射出3万多个肉眼不可见的红外点到用户脸部,多维度.多角度在颜色.纹理.深度等数据进行高层次对比,安全性和精准性更高,识别速度更快.尽 ...
- KuPlay平台:安全性对区块链游戏而言,依然是第一位
微信公众号:酷玩区块 春风得意马蹄疾,一日看尽长安花. 说这是过去多年来中国互联网游戏厂商的真实写照不为过,然而这样春风得意的"黄金时代"却在渐行渐远.近日著名游戏人称:" ...
- 米尔边缘AI计算盒子FZ5体验评测:一款极高性价比AI开发板
相信大部分人都听过近几年大火的绝地求生游戏(吃鸡)里"落地成盒"的梗,形象.不失风趣,一度成为网络流行语,但是,这是贬义.而边缘AI计算盒子FZ5"落地成盒"的 ...
- 组装电脑配置单报价_组装电脑配置单推荐,性价比高的游戏、画图和办公全能配置电脑!...
今天我们再议论一下一个老生常谈的组装电脑话题,生活中我们组装电脑的目的无非就是玩游戏.制图和办公需求,其实每种需求我们组装电脑时硬件选择的标准和类型是不一样的,玩游戏的电脑对CPU和显卡要求比较高,制 ...
最新文章
- java object finalize_Java Object finalize() 方法
- c语言中void跟argv,argc和argv []在C语言中
- yarn资源调度(网络搜集)
- linux内核杂记(12)-进程调度(7)
- 【Linux】一步一步学Linux——nm命令(250)
- 试论软件工程学科的交叉性_海外大学所有学科梳理(超大工程,建议收藏)-大学下的硕士一二级学科...
- leetcode —— 959. 由斜杠划分区域
- 如何启动php程序,如何第一次运行PHP程序?
- Pandas入门教程(二)
- 思科CCNA考试命令集总结
- python课设带报告_python实时投票系统的课设报告
- Java中对象的实例化
- Python datetime日期相减
- Ubuntu20.04+GTX1060+显卡驱动+CUDA11.8+cuDNN8.5.0
- 应用程序如何使用驱动程序
- 1.6Java-接口、抽象类
- html画布实现小球沿直线下落,js+html5实现的自由落体运动效果代码
- 一个对C#程序混淆加密,小巧但够用的小工具
- c语言怎么打开mp4格式错误,c语言怎么播放MP4?
- 高级语言第三次作业及答案
热门文章
- js、html实现断点播放视频,视频资源在localStorage中
- javascript初级动态效果之使用原生js实现轮播图效果
- 20多岁的生活方式决定了你30岁的打开方式_演讲稿
- iOS系统架构和常用框架
- python做乘法运算定律_乘法运算定律(四年级数学下册乘法运算定律)
- python股票量化投资刑不行_【邢不行|量化小讲堂系列10-Python量化入门】量化投资中如何处理复权、除权问题...
- DQN-FlappyBird项目学习
- 镁光闪存颗粒对照表_最全的内存颗粒编码规则说明,教你看穿内存条到底用的什么颗粒...
- 3DMAx Panda Directx Exporter 导出 X插件
- matlab程序中length()啥意思,length是什么意思