280 likes | 418 Views
罗培羽 — 教你用 VB 制作 RPG 游戏. 第六节 储存和读取 Save And Load. 罗培羽 作品. 网名 : 碧俐千仞 QQ:345697666 E_mail : tyxxxx@qq.com 博客: http://hi.baidu.com/mhqy. 在菜单中添加一个储存的按钮. PicSave PicSave2 PicSave_MouseMove PicExit2.Visible = False PicSave2.Visible = True PicExit_MouseMove PicSave2.Visible = False
E N D
罗培羽—教你用VB制作RPG游戏 第六节 储存和读取 Save And Load
罗培羽 作品 • 网名: 碧俐千仞 • QQ:345697666 • E_mail:tyxxxx@qq.com • 博客:http://hi.baidu.com/mhqy
在菜单中添加一个储存的按钮 • PicSave • PicSave2 PicSave_MouseMove PicExit2.Visible = False PicSave2.Visible = True PicExit_MouseMove PicSave2.Visible = False PicExit2.Visible = True Form_MouseMove PicExit2.Visible = False PicSave2.Visible = False
修改地图结构 • 用地图数组代替先前的地图结构的好处在于我们可以通过一个编号来控制地图,这样程序不必知道地图的名称 '定义地图 Public map1 As Dimmap Public map2 As Dimmap • 改为-------我们假设游戏有10个地图 '定义地图 Public Map(10) As Dimmap
GoDimMap() 地图的赋值 • 把map1改为Map(1) • 把map2改为Map(2) 用地图数组取代一个个地图
修改地图启动函数 用整数来表示地图的编号 Public Sub MapStart(MapX As Integer, X As Single, Y As Single, T As Integer) MapNow = MapX 把所有的mapx改为Map(MapX),即通过用调用编号取代直接调用地图名字 Public MapNow As Integer'标记现在在用那张地图 记录现在的地图编号
修改地图启动的调用 • Do_Walk.Load Call MapStart(map1, 500, 500, 0) 改为 Call MapStart(1, 500, 500, 0) • Do_Npc • 把map1改为1,map2改为1 • Do_Npc • 型如 • If MapNow = map1.botton And i = 0 Then • 改为 • If MapNow = 1 And i = 0 Then 用编号
写文件的方法 • 为了演示生成储存文件的方法,我们新建个工程,添加个按钮,写上:
试试 Open "c:/a.txt" For Output As #1 Write #1, "ok" Close #1 打开c盘下的a.txt文件,如果没有就创建一个,并把这个文件作为编号为1的文件(这些编号可以使你一下子打开多个文件) 有始有终 最后我们要把文件关闭(我们上面写的Write 其实只储存在内存中,关闭文件时才写到文件里) 在编号为1的文件中写上“ok”
试试 • Write #1, "罗培羽 作品" '字符串 • Write #1, "网名: 碧俐千仞" • Write #1, "QQ:345697666" • Write #1, 345697666 ‘数字 • 最后不要忘了把a.txt删了
储存文件结构 • 记录角色信息 • 记录HP,所在地图编号,所在坐标 • 记录地图信息 • 地图1的地图、上层图、通过区域图、音乐 所有NPC的图片和坐标 • 地图2的地图、上层图、通过区域图、音乐 所有NPC的图片和坐标 …………
写储存函数 添加模块 Do_SaveLoad Public Sub Save() End Sub
记录角色信息 • Open AppDisk + "save.txt" For Output As #1'记录角色信息 • Write #1, Hp '记录角色生命值 • Write #1, Xn '记录角色坐标x • Write #1, Yn '记录角色坐标y • Write #1, MapNow '记录角色所在地图编号 • Close #1
记录地图信息 Close #1前 '记录地图信息 For i = 0 To 9 Write #1, Map(i).Bottom Write #1, Map(i).Top Write #1, Map(i).Through Write #1, Map(i).Music
For j = 0 To 9 'Npc信息 Write #1, Map(i).NpcPicture(j) Write #1, Map(i).NpcX(j) Write #1, Map(i).NpcY(j) Next j Next i
储存成功提示Close #1后 • '储存成功提示 • Menu.CurrentX = 650 * 15 • Menu.CurrentY = 450 * 15 • Menu.ForeColor = RGB(0, 0, 0) • Menu.FontSize = 14 • Menu.Print "储存成功"
写读取函数 Public Sub LoadGame() End Sub Title “旧的回忆”中写入 Call LoadGame
从文件读入的方法 • Open AppDisk + "save.txt" For Input As #1 • Input #1, 变量 • Close #1
LoadGame 赋值 '重新赋值 Open AppDisk + "save.txt" For Input As #1 '角色信息 Input #1, Hp Input #1, Xn Input #1, Yn Input #1, MapNow
'地图信息 For i = 0 To 9 Input #1, Map(i).Bottom Input #1, Map(i).Top Input #1, Map(i).Through Input #1, Map(i).Music For j = 0 To 9 'Npc信息 Input #1, Map(i).NpcPicture(j) Input #1, Map(i).NpcX(j) Input #1, Map(i).NpcY(j) Next j Next i Close #1
调用 main.Show …… '调用处理 Call MapStart(MapNow, Xn, Yn, 0)
让NPC消失试试读取的结果 • NPC移动函数 • Do_Walk中
Public Sub NpcMove(MapX As Integer, NpcI As Integer, Nx As Single, Ny As Single) Map(MapX).NpcX(NpcI) = Nx main.Npc(i).Left = Map(MapX).NpcX(NpcI) Map(MapX).NpcY(NpcI) = Ny main.Npc(i).Top = Map(MapX).NpcY(NpcI) Call Draw(Xs, Ys) End Sub
调用试试 Do_Npc Call talk("苏媚", "我走了", appdist + "face/sm.gif") Call NpcMove(1, 0, 100, 100)
为了储存以后我们要用到的剧情变量 • Do_Npc中 (假设10个变量) Public P(10) As Integer • Save记录角色信息前 '记录剧情变量 For i = 0 To 9 Write #1, P(i) Next i
Load角色信息前 '剧情变量 For i = 0 To 9 Input #1, P(i) Next i
成功 • 下一节我们将通过一个实例来制作一个有剧情的完整RPG游戏
谢谢支持 • Hi.baidu.com/mhqy