-
vb.net 教程 4-9 二进制文件读写 游戏存档修改器
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
前几节学习了读取二进制文件,实际写入二进制文件操作差不多,本节制作一个简单的游戏存档修改器,来说明二进制文件的写入。
记得我的博客第一篇文章是写的《仙剑奇侠传3 外传》存档文件修改器(请参看:《[vb6]仙剑3外传的存档修改器》),当时是用vb6写的。
想想也是十多年过去了。
十多年过去已经很少在电脑上玩游戏了,但是还保留了 大富翁4超时空之旅。
刚上大学那会儿,电脑还是486、586,还没有win32,不过已经有了大富翁、仙剑这样的优秀游戏,
我那时候就开始玩大富翁2和仙剑,现在还记忆犹新。
好了不说闲话,进入正题。
大富翁4的存档文件在安装目录下,从 SAVE0.DAT至SAVE6.DAT,其中Save0.dat是自动存档。
玩家相关数据和存放位置:
现金在 2C,长度为3字节。
存款在 30,长度为3字节。
点卷在 40,长度为2字节。
窗体设计界面如下:
OpenFileDialog的设置如下:
全部代码如下:
Imports System.IO
Public Class Form3
Dim savefile As String
Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles btnOpen.Click
If ofdSaveFile.ShowDialog <> DialogResult.OK Then
Exit Sub
End If
savefile = ofdSaveFile.FileName
Call readSave()
End Sub
Private Sub readSave()
Dim intXj As Integer = 0
Dim intCk As Integer = 0
Dim intDq As Int16 = 0
Dim fs As New FileStream(savefile, FileMode.Open, FileAccess.Read)
Try
If fs.CanSeek Then
Dim br As New BinaryReader(fs)
fs.Seek(44, SeekOrigin.Begin)
intXj = br.ReadInt32()
intCk = br.ReadInt32()
fs.Seek(12, SeekOrigin.Current)
intDq = br.ReadInt16()
br.Close()
End If
fs.Close()
lblInfo.Text = "读取存档完毕"
Catch ex As Exception
lblInfo.Text = "读取存档出错:" & ex.Message
End Try
txtXj.Text = intXj.ToString
txtCk.Text = intCk.ToString
txtDq.Text = intDq.ToString
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Dim intXj As Integer = Integer.Parse(txtXj.Text)
Dim intCk As Integer = CInt(txtCk.Text)
Dim intDq As Int16 = CType(txtDq.Text, Int16)
Using fs As New FileStream(savefile, FileMode.Open, FileAccess.Write)
Try
If fs.CanSeek Then
Dim bw As New BinaryWriter(fs)
bw.Seek(44, SeekOrigin.Begin) '定位流位置,相对于流开始的44字节
bw.Write(intXj) '写入一个Integer数据
bw.Write(intCk) '写入一个Integer数据
bw.Seek(12, SeekOrigin.Current) '相对当前流的12个字节
bw.Write(intDq) '写入一个int16数据
bw.Close()
End If
lblInfo.Text = "修改存档完毕"
Catch ex As Exception
lblInfo.Text = "写入存档出错:" & ex.Message
End Try
End Using
End Sub
End Class
运行时如下:
读取情况:
修改情况:
修改后在游戏里面载入存档:
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看 vb.net 教程 目录
————————————————
版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/uruseibest/article/details/75211295
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比