魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~23开始游戏-存档管理

魔塔之拯救白娘子 完整工程下载地址:
魔塔之拯救白娘子》流程分析7:游戏存档管理
作用如下:
①自动存档,当上楼或者下楼的时候,会自动帮玩家存档并截图(吼吼,游戏次数长了,存档容量可是几百M哦,因为图片没有压缩过,注意清理,硬盘空间大的请忽略)
②手动存档:自动截图并存档

下边是设计界面:
游戏存档管理
下边是源码:

Option Explicit
Dim 当前手动存档图形编号 As Integer
Dim 手动存档条目 As Integer
Dim 自动存档条目 As Integer
Dim 存档路径名字 As String

Private Sub Cmd_手动存档_上一组_Click()

读取手动存档图形数据 (2)
End Sub

Private Sub Cmd_手动存档_下一组_Click()

读取手动存档图形数据 (1)
End Sub

Private Sub Cmd_自动存档_上一组_Click()
读取自动存档图形数据 (2)
End Sub

Private Sub Cmd_自动存档_下一组_Click()
读取自动存档图形数据 (1)
End Sub

Private Sub Com_手动存档_删除_Click(Index As Integer)
'删除某个存档
On Error Resume Next

'删除存档图片存档条目 & "#"
Kill App.Path & "\save\" & Label_存档编号(Index) & ".bmp"
Kill App.Path & "\save\" & Label_存档编号(Index) & ".ini"

'从配置文件中删除这条记录
iniFileName = "手动存档":
DelIniSec 手动存档条目 + Index & "#"
'DelIniKey iniFileName, 自动存档条目 + Index & "#"
手动存档数量 = 手动存档数量 - 1

SetIniS "手动存档数量", "档案数量", 手动存档数量

游戏存档管理初始化
End Sub

Private Sub Com_自动存档_删除_Click(Index As Integer)
'删除某个存档
On Error Resume Next


'删除存档图片存档条目 & "#"
Kill App.Path & "\save\" & Label_自动存档编号(Index) & ".bmp"
Kill App.Path & "\save\" & Label_自动存档编号(Index) & ".ini"
'从配置文件中删除这条记录
iniFileName = "自动存档":
DelIniSec 自动存档条目 + Index & "#"
'DelIniKey iniFileName, 自动存档条目 + Index & "#"
自动存档数量 = 自动存档数量 - 1

SetIniS "自动存档数量", "档案数量", 自动存档数量

游戏存档管理初始化
End Sub

Private Sub Command1_Click()
Running = 9: BackPic.LoadGraph "image\魔塔背景\魔塔背景1.jpg", xgBLACK
Unload Me
End Sub

Private Sub Command2_Click()
Running = 9:
BackPic.LoadGraph "image\魔塔背景\魔塔背景1.jpg", xgBLACK
Unload Me
End Sub

Private Sub Command3_Click()
On Error Resume Next
Kill App.Path & "\save\*.*"
Kill App.Path & "\自动存档.ini"
Kill App.Path & "\手动存档.ini"
End Sub

Private Sub Form_Load()
'获得主窗口的坐标
     Me.Left = frmMain.Left
     Me.Top = frmMain.Top + 800
    
    Dim rtn As Long
    rtn = GetWindowLong(hWnd, GWL_EXSTYLE)
    rtn = rtn Or WS_EX_LAYERED
    SetWindowLong hWnd, GWL_EXSTYLE, rtn
    SetLayeredWindowAttributes hWnd, 0, 200, LWA_ALPHA
   
'让窗口在顶层
rtn = SetWindowPos(Me.hWnd, -1, 0, 0, 0, 0, 3)
'取消窗口在顶层

游戏存档管理初始化

End Sub

Sub 游戏存档管理初始化()
On Error Resume Next
'
Dim j As Integer
For j = 0 To 3
Image_手动存档(j).Visible = False
Label_存档编号(j).Visible = False
Image_自动存档(j).Visible = False
Label_自动存档编号(j).Visible = False
Com_手动存档_删除(j).Visible = False
Com_自动存档_删除(j).Visible = False
Next

Cmd_手动存档_上一组.Visible = False
Text_手动存档.Visible = False
Cmd_手动存档_下一组.Visible = False

Cmd_自动存档_上一组.Visible = False
Text_自动存档.Visible = False
Cmd_自动存档_下一组.Visible = False


iniFileName = "手动存档":
手动存档数量 = GetIniS("手动存档数量", "档案数量", 手动存档数量)
 If 手动存档数量 > 0 Then 'App.Path & "\save\" &
 


手动存档条目 = 手动存档数量


读取手动存档图形数据 (0)


End If


iniFileName = "自动存档":
自动存档数量 = GetIniS("自动存档数量", "档案数量", 自动存档数量)  '存放自动存档数量 App.Path & "\save\" &
If 自动存档数量 > 0 Then


自动存档条目 = 自动存档数量
读取自动存档图形数据 (0)
End If

End Sub

Sub 读取自动存档图形数据(状态 As Integer) '0 第一次读 '1向后 '2向前
Dim k As Integer
Dim j As Integer

On Error Resume Next
'Dim 存档路径名字 As String

If 状态 = 0 Then

自动存档条目 = 1

ElseIf 状态 = 1 Then

自动存档条目 = 自动存档条目 + 4:
If 自动存档条目 > 自动存档数量 Then 自动存档条目 = 自动存档数量

ElseIf 状态 = 2 Then
自动存档条目 = 自动存档条目 - 4:

If 自动存档条目 < 4 Then 自动存档条目 = 1

End If


For j = 0 To 3
存档路径名字 = ""

存档路径名字 = GetIniS(自动存档条目 + j & "#", "存档截图", 存档路径名字)


'
If 存档路径名字 = "" Or 存档路径名字 = ".bmp" Then Exit For
Label_自动存档编号(j) = 存档路径名字
Label_自动存档编号(j).Visible = True
Image_自动存档(j).Picture = LoadPicture(App.Path & "\save\" & 存档路径名字 & ".bmp")
Image_自动存档(j).Visible = True
Com_自动存档_删除(j).Visible = True

Next

Text_自动存档.Visible = True


Text_自动存档 = 自动存档条目 & "/" & 自动存档数量


If 自动存档数量 > 4 Then

Cmd_自动存档_下一组.Visible = True
Else
Cmd_自动存档_下一组.Visible = False
Cmd_自动存档_上一组.Visible = False
End If

If 自动存档条目 > 4 Then

Cmd_自动存档_上一组.Visible = True
Else

Cmd_自动存档_上一组.Visible = False
End If

End Sub


Sub 读取手动存档图形数据(状态 As Integer) '0 第一次读 '1向后 '2向前
Dim k As Integer
Dim j As Integer
'Dim 存档路径名字 As String
On Error Resume Next

If 状态 = 0 Then

手动存档条目 = 1

ElseIf 状态 = 1 Then

手动存档条目 = 手动存档条目 + 4:
If 手动存档条目 > 手动存档数量 Then 手动存档条目 = 手动存档数量

ElseIf 状态 = 2 Then
手动存档条目 = 手动存档条目 - 4:

If 手动存档条目 < 4 Then 手动存档条目 = 1

End If


For j = 0 To 3
存档路径名字 = ""

存档路径名字 = GetIniS(手动存档条目 + j & "#", "存档截图", 存档路径名字)


If 存档路径名字 = "" Or 存档路径名字 = ".bmp" Then Exit For
Label_存档编号(j) = 存档路径名字
Label_存档编号(j).Visible = True
Image_手动存档(j).Picture = LoadPicture(App.Path & "\save\" & 存档路径名字 & ".bmp")
Image_手动存档(j).Visible = True
Com_手动存档_删除(j).Visible = True
Next

Text_手动存档.Visible = True
'第一组1-4
'第二组5-8
'第三组9-12
'第四组13-16
'第5组 17-20

Text_手动存档 = 手动存档条目 & "/" & 手动存档数量


If 手动存档数量 > 4 Then

Cmd_手动存档_下一组.Visible = True
Else
Cmd_手动存档_下一组.Visible = False
Cmd_手动存档_上一组.Visible = False
End If

If 手动存档条目 > 4 Then

Cmd_手动存档_上一组.Visible = True
Else

Cmd_手动存档_上一组.Visible = False
End If
End Sub

'处理存档
Sub 读存档内容(存档条目 As Integer, 存档类别 As Boolean)
'根据编号读取相应的存档来初始化游戏
'Dim 存档路径名字 As String
Dim j As Integer
Dim k As Integer
Running = 1: 读档标志 = True: frmMain.判断running状态_初始化: ' BackPic.LoadGraph "image\魔塔背景\魔塔背景3.jpg", xgBLACK
'
If 存档类别 = True Then
'
iniFileName = "手动存档"
  存档路径名字 = GetIniS(手动存档条目 + j & "#", "存档截图", 存档路径名字)
  游戏进度.到过的最大层号 = GetIniS("手动存档数量", "到过的最大层号", 游戏进度.到过的最大层号)

Else
iniFileName = "自动存档":
存档路径名字 = GetIniS(存档条目 & "#", "存档截图", 存档路径名字)
游戏进度.到过的最大层号 = GetIniS("自动存档数量", "到过的最大层号", 游戏进度.到过的最大层号)

End If


人物信息.角色等级 = GetIniS(存档条目 & "#", "等级", 人物信息.角色等级)
人物信息.角色生命值 = GetIniS(存档条目 & "#", "生命", 人物信息.角色生命值)
人物信息.角色攻击力 = GetIniS(存档条目 & "#", "攻击", 人物信息.角色攻击力)
人物信息.角色防御值 = GetIniS(存档条目 & "#", "防御", 人物信息.角色防御值)
人物信息.角色持有的金币 = GetIniS(存档条目 & "#", "金币", 人物信息.角色持有的金币)
人物信息.角色的经验值 = GetIniS(存档条目 & "#", "经验值", 人物信息.角色的经验值)

勇者包裹.黄钥匙数量 = GetIniS(存档条目 & "#", "黄钥匙数量", 勇者包裹.黄钥匙数量)
勇者包裹.蓝钥匙数量 = GetIniS(存档条目 & "#", "蓝钥匙数量", 勇者包裹.蓝钥匙数量)
勇者包裹.红钥匙数量 = GetIniS(存档条目 & "#", "红钥匙数量", 勇者包裹.红钥匙数量)
勇者包裹.铁榔头数量 = GetIniS(存档条目 & "#", "铁榔头数量", 勇者包裹.铁榔头数量)
勇者包裹.风之罗盘数量 = GetIniS(存档条目 & "#", "风之罗盘数量", 勇者包裹.风之罗盘数量)
勇者包裹.怪物手册数量 = GetIniS(存档条目 & "#", "怪物手册数量", 勇者包裹.怪物手册数量)
勇者包裹.星光神锒数量 = GetIniS(存档条目 & "#", "星光神锒数量", 勇者包裹.星光神锒数量)
勇者包裹.幸运十字架数量 = GetIniS(存档条目 & "#", "幸运十字架数量", 勇者包裹.幸运十字架数量)
勇者包裹.圣光徽的数量 = GetIniS(存档条目 & "#", "圣光徽的数量", 勇者包裹.圣光徽的数量)

谈话对象.NPC对话标志_小偷 = GetIniS(存档条目 & "#", "NPC对话标志_小偷", 谈话对象.NPC对话标志_小偷)
谈话对象.NPC对话标志_小青 = GetIniS(存档条目 & "#", "NPC对话标志_小青", 谈话对象.NPC对话标志_小青)
谈话对象.NPC对话标志_白娘子 = GetIniS(存档条目 & "#", "NPC对话标志_白娘子", 谈话对象.NPC对话标志_白娘子)
谈话对象.NPC对话标志_老人 = GetIniS(存档条目 & "#", "NPC对话标志_老人", 谈话对象.NPC对话标志_老人)
谈话对象.NPC对话标志_商人 = GetIniS(存档条目 & "#", "NPC对话标志_商人", 谈话对象.NPC对话标志_商人)
谈话对象.NPC对话标志_冥灵魔王 = GetIniS(存档条目 & "#", "NPC对话标志_冥灵魔王", 谈话对象.NPC对话标志_冥灵魔王)
谈话对象.NPC对话标志_红衣魔王 = GetIniS(存档条目 & "#", "NPC对话标志_红衣魔王", 谈话对象.NPC对话标志_红衣魔王)
谈话对象.NPC对话标志_红衣大魔王 = GetIniS(存档条目 & "#", "NPC对话标志_红衣大魔王", 谈话对象.NPC对话标志_红衣大魔王)

'男主角移动.x = GetIniS(存档条目 & "#", "男主角移动X", 男主角移动.x)
'男主角移动.y = GetIniS(存档条目 & "#", "男主角移动Y", 男主角移动.y)
男主角移动.移动步数 = GetIniS(存档条目 & "#", "男主角移动步数", 男主角移动.移动步数)
男主角移动.移动方向 = GetIniS(存档条目 & "#", "男主角移动方向", 男主角移动.移动方向)

Dim 临时字串a As String, 临时字串b As String, 临时字串c As String, 临时字串d As String
On Error Resume Next

临时字串a = GetIniS(存档条目 & "#", "游戏进度.新地图", 临时字串a)
临时字串b = GetIniS(存档条目 & "#", "游戏进度.读系统档", 临时字串b)
临时字串c = GetIniS(存档条目 & "#", "游戏进度.上楼处理标志", 临时字串c)
临时字串d = GetIniS(存档条目 & "#", "游戏进度.下楼处理标志", 临时字串d)
Dim m1() As String, m2() As String, m3() As String, m4() As String
For j = 0 To 99
   m1 = Split(临时字串a, ",")
   游戏进度.新地图(j) = m1(j)
   m2 = Split(临时字串b, ",")
  游戏进度.读系统档(j) = m2(j)
  m3 = Split(临时字串c, ",")
  游戏进度.上楼处理标志(j) = m3(j)
  m4 = Split(临时字串d, ",")
  游戏进度.下楼处理标志(j) = m4(j)
  
       Next j
'改写临时地图
地图层号 = GetIniS(存档条目 & "#", "地图层数", 地图层号)


FileCopy App.Path & "\save\" & 存档路径名字 & ".ini", App.Path & "\mapX.ini"

游戏进度.地图当前层号 = 地图层号
'游戏进度.读玩家档 = True
'frmMain.读临时地图数据 (地图层号)
'frmMain.清除地图上多余的主角
'frmMain.写临时地图数据 (0)
'游戏进度.上楼处理标志(地图层号) = True
游戏进度.上楼处理标志(地图层号) = True
frmMain.游戏中读取地图层次判断
Erase m1(), m2(), m3(), m4()
Unload Me
End Sub

Private Sub Image_手动存档_DblClick(Index As Integer)
读存档内容 手动存档条目 + Index, True
End Sub

Private Sub Image_自动存档_DblClick(Index As Integer)
'处理读档
读存档内容 自动存档条目 + Index, False
End Sub

Private Sub Timer1_Timer()
'根据主窗口调整背身窗口
'如果主窗口变小就隐身
If frmMain.WindowState = 1 Then
Me.Hide
Else
Me.Show
End If
'如果主窗口移动就跟着移动
'     Me.Left = frmMain.Left + 1000
'     Me.Top = frmMain.Top + 3000
     If Me.Left <> frmMain.Left Then Me.Left = frmMain.Left
     If Me.Top - 800 <> frmMain.Top Then Me.Top = frmMain.Top + 800
End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gosub60

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值