vb.net 教程 4-9 二进制文件读写 游戏存档修改器

前端之家收集整理的这篇文章主要介绍了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,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 教程 目录

原文链接:https://www.f2er.com/vb/256522.html

猜你在找的VB相关文章