vb.net 教程 4-9 二进制文件读写 游戏存档修改器
2017-07-18 21:02
537 查看
前几节学习了读取二进制文件,实际写入二进制文件操作差不多,本节制作一个简单的游戏存档修改器,来说明二进制文件的写入。
记得我的博客第一篇文章是写的《仙剑奇侠传3 外传》存档文件修改器(请参看:《[vb6]仙剑3外传的存档修改器》),当时是用vb6写的。
想想也是十多年过去了。
十多年过去已经很少在电脑上玩游戏了,但是还保留了 大富翁4超时空之旅。
刚上大学那会儿,电脑还是486、586,还没有win32,不过已经有了大富翁、仙剑这样的优秀游戏,
我那时候就开始玩大富翁2和仙剑,现在还记忆犹新。
好了不说闲话,进入正题。
大富翁4的存档文件在安装目录下,从 SAVE0.DAT至SAVE6.DAT,其中Save0.dat是自动存档。
玩家相关数据和存放位置:
现金在 2C,长度为3字节。
存款在 30,长度为3字节。
点卷在 40,长度为2字节。
窗体设计界面如下:
OpenFileDialog的设置如下:
全部代码如下:
运行时如下:
读取情况:
修改情况:
修改后在游戏里面载入存档:
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看
vb.net 教程 目录
记得我的博客第一篇文章是写的《仙剑奇侠传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 教程 目录
相关文章推荐
- vb.net 教程 4-9 二进制文件读写 1
- vb.net 教程 4-9 二进制文件读写 2
- vb.net 教程 4-9 二进制文件读写 3
- 读写二进制文件 VB.NET
- VB.NET读写INI配置文件
- vb.net 教程 4-5 文件操作 File 2
- VB.Net程序中对.Config文件读写的类
- VB.NET中Init文件的读写
- VB.Net程序中对.Config文件读写的类(第二版)
- VB.NET 创建文件以及文件的读写
- vb.net读写文件代码
- 【vb.net】json文件的读写
- vb.net 教程 3-12 资源文件 1-1
- vb.net 教程 4-8 文本文件读写 1
- VB.NET以二进制方式将嵌入的资源写入文件(不分文件类型)
- vb.net 读写文件
- vb.net 教程 4-8 文本文件读写 3
- VB.net读写二进制数据方法
- Spire.Email 教程:从C#,VB.NET中的PST文件获取文件夹信息
- [VB.NET]如何定位读取二进制文件,每次只读取指定长度?