魔塔之拯救白娘子 完整工程下载地址:
魔塔之拯救白娘子》流程分析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