魔塔之拯救白娘子 完整工程下载地址:
《魔塔之拯救白娘子》流程分析4:物体碰撞检测
处理方式分2步,第一步是游戏时主角显示处理:当主角移动时需要擦除上一个坐标位的主角,然后在新位置上放置主角,但是呢,如果碰到相应的道具、物品、敌人将触发第二步:物体碰撞检测
①游戏时主角显示处理:
Sub 游戏时主角显示处理()
Dim j As Integer
Dim m() As String
Dim k As Integer
Dim i As Integer
'男主角移动.X坐标, 男主角移动.Y坐标
' 0 1 2 3 4 5 6 7 8 9 10 11 12
' 0,32,64,96,128,160,192,224,256,288,320,352,384
'地图数据(1)=0,3, 5, 5, 5, 3, 8, 3, 5, 5, 5, 3, 0
'移动方向
' 2 上
' 1左 0 右3
' 下4
'主角地图上每层初始坐标.X1 = 地图XY坐标.mapX坐标(10)
'主角地图上每层初始坐标.Y1 = 地图XY坐标.mapY坐标(6)
'主角移动及判断
If 男主角移动.移动方向 = 0 Then Exit Sub
If 男主角移动.移动速度 < 4 Then Exit Sub
地图编辑器界面_临时地图标志 = True
'①获得主角当前,上下左右的图形
'获得当前
j = 男主角移动.x / 32
k = 男主角移动.y / 32
男主角移动.x行 = j
男主角移动.y列 = k
' If k < 1 Then k = 1
' If k > 11 Then k = 11
地图数据串.主角所在行 = Split(地图数据(j), ",")
地图数据串.主角所在列 = k
地图数据串.主角所在行列数据 = 地图数据串.主角所在行(地图数据串.主角所在列)
'②移动判断及杀怪处理
Select Case 男主角移动.移动方向
Case 1 '←
k = k - 1
If k < 1 Then k = 1
'获得左方
地图数据串.主角左方_行 = Split(地图数据(j), ",")
地图数据串.主角左方_列 = k
地图数据串.主角左方行列数据 = 地图数据串.主角左方_行(地图数据串.主角左方_列)
物体碰撞检测 (地图数据串.主角左方行列数据)
If 通过标志 = True Then
地图数据串.主角左方_行(地图数据串.主角左方_列) = 14
m = Split(地图数据(j), ",")
m(k) = 地图数据串.主角左方_行(地图数据串.主角左方_列)
地图数据(j) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
End If
Case 2 '↑
j = j - 1
If j < 1 Then j = 1
移动方向中待处理的行列.待处理的行 = j
移动方向中待处理的行列.待处理的列 = k
'获得上方
地图数据串.主角上方_行 = Split(地图数据(j), ",")
地图数据串.主角上方_列 = k
地图数据串.主角上方行列数据 = 地图数据串.主角上方_行(地图数据串.主角上方_列)
物体碰撞检测 (地图数据串.主角上方行列数据)
If 通过标志 = True Then
'通过则上移,清除原先的图块
地图数据串.主角上方_行(地图数据串.主角上方_列) = 14
m = Split(地图数据(j), ",")
m(k) = 地图数据串.主角上方_行(地图数据串.主角上方_列)
地图数据(j) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
End If
Case 3 '→
k = k + 1: If k > 11 Then k = 11
'获得右方
地图数据串.主角右方_行 = Split(地图数据(j), ",")
地图数据串.主角右方_列 = k
地图数据串.主角右方行列数据 = 地图数据串.主角右方_行(地图数据串.主角右方_列)
物体碰撞检测 (地图数据串.主角右方行列数据)
If 通过标志 = True Then
地图数据串.主角右方_行(地图数据串.主角右方_列) = 14
m = Split(地图数据(j), ",")
m(k) = 地图数据串.主角右方_行(地图数据串.主角右方_列)
地图数据(j) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
End If
Case 4 '↓
j = j + 1
If j > 11 Then j = 11
'获得下方
地图数据串.主角下方_行 = Split(地图数据(j), ",")
地图数据串.主角下方_列 = k
地图数据串.主角下方行列数据 = 地图数据串.主角下方_行(地图数据串.主角下方_列)
物体碰撞检测 (地图数据串.主角下方行列数据)
If 通过标志 = True Then
地图数据串.主角下方_行(地图数据串.主角下方_列) = 14
m = Split(地图数据(j), ",")
m(k) = 地图数据串.主角下方_行(地图数据串.主角下方_列)
地图数据(j) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
End If
End Select
'③将主角移动到新位置,并抹去原先位置上的图形
If 通过标志 = True Then
男主角移动.x = 地图XY坐标.mapX坐标(j)
男主角移动.y = 地图XY坐标.mapY坐标(k)
End If
'显示临时地图
'背景_动态Draw
End Sub
②物体碰撞检测:源码如下
Sub 物体碰撞检测(碰到的图块编号 As Integer)
'物体碰撞检测
'地图数据串.主角上方行列数据
Dim m() As String
Select Case 碰到的图块编号
Case 1 '基本图块,可以通过
通过标志 = True
提示信息 = ""
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\走路.wav")
播放音效.PlayWav myDSBuff(0), False
Case 0, 2, 3, 4, 5, 7 '不能通过
通过标志 = False
提示信息 = "这个方向不能通过!"
Case 6 '黄色门:用黄钥匙开启
If 勇者包裹.黄钥匙数量 > 0 Then
勇者包裹.黄钥匙数量 = 勇者包裹.黄钥匙数量 - 1
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\打开房间木门.wav")
播放音效.PlayWav myDSBuff(0), False
Else
通过标志 = False
提示信息 = "需要黄钥匙开门!"
End If
Case 8 '上楼处理:
'地图层号从2开始,地图上一层从1开始
通过标志 = False
'①上楼先保存本层的各种物品状态到临时文件中
If 地图层号 < 99 Then
If 游戏进度.地图当前层号 + 1 <> 地图层号 + 1 Then
地图层号 = 游戏进度.地图当前层号
End If
清除地图上多余的主角
写临时地图数据 (地图层号) '保存当前地图状况到临时文件里
'②自动帮玩家存档
游戏存档 地图层号, False
'③增加地图数量
If 地图层号 = 24 And 男主角移动.x / 32 = 6 Then
If 男主角移动.y / 32 = 2 Then '24层在左边上楼
地图层号 = 25
Else
If 男主角移动.y / 32 = 10 Then '24层在右边上楼
地图层号 = 26
End If
End If
End If
If 地图层号 = 25 And 男主角移动.x / 32 = 8 And 男主角移动.y / 32 = 6 Then
If 勇者包裹.圣光徽的数量 < 3 Then
提示信息 = "需要3枚圣光徽,才能跟最终BOSS决斗!"
地图层号 = 24
Else
地图层号 = 27
End If
End If
地图层号 = 地图层号 + 1 ': 游戏中读取地图层次判断
游戏进度.上楼处理标志(地图层号) = True
'游戏进度.读系统档(地图层号) = True
游戏进度.到过的最大层号 = 地图层号
End If
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\上楼下楼.wav")
播放音效.PlayWav myDSBuff(0), False
背景音乐选择
Case 9 '下楼处理
通过标志 = False
If 地图层号 < 99 Then
If 游戏进度.地图当前层号 - 1 <> 地图层号 - 1 Then
地图层号 = 游戏进度.地图当前层号
End If
清除地图上多余的主角
写临时地图数据 (地图层号) '保存当前地图状况到临时文件里
'②自动帮玩家存档
游戏存档 地图层号, False
'③增加地图数量
If 地图层号 = 26 Then '24层在左边上楼
地图层号 = 25
End If
If 地图层号 = 27 Then '24层在右边上楼
地图层号 = 25
End If
地图层号 = 地图层号 - 1 ': 游戏中读取地图层次判断
If 地图层号 = 1 Then 地图层号 = 2
游戏进度.下楼处理标志(地图层号) = True
'游戏进度.读系统档(地图层号) = True
End If
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\上楼下楼.wav")
播放音效.PlayWav myDSBuff(0), False
背景音乐选择
Case 10 '蓝色门
If 勇者包裹.蓝钥匙数量 > 0 Then
勇者包裹.蓝钥匙数量 = 勇者包裹.蓝钥匙数量 - 1
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\打开房间木门.wav")
播放音效.PlayWav myDSBuff(0), False
Else
通过标志 = False
提示信息 = "需要蓝钥匙开门!"
End If
Case 11 '红色门:用红钥匙开启
If 勇者包裹.红钥匙数量 > 0 Then
勇者包裹.红钥匙数量 = 勇者包裹.红钥匙数量 - 1
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\打开房间木门.wav")
播放音效.PlayWav myDSBuff(0), False
Else
通过标志 = False
提示信息 = "需要红钥匙开门!"
End If
Case 12 '防盗门:只能由小偷开启
If 谈话对象.NPC对话标志_小偷 = 1 Then
通过标志 = True
Else
通过标志 = False
提示信息 = "此门只能由小偷开启!"
End If
Case 13 '铁门:可以破坏
通过标志 = True
提示信息 = "铁门的锁被你用刀砍断了!"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\金属敲击-短小.wav")
播放音效.PlayWav myDSBuff(0), False
Case 15 '白娘子对话
'谈话对象.NPC对话标志_白娘子=1 第一次场景对话,以此类推
通过标志 = False
If 谈话对象.NPC对话标志_白娘子 = 0 And 对话窗口显示标志 = False Then
谈话对象.NPC对话标志_白娘子 = 1: 对话窗口显示标志 = True
对话文件名编号 = 5
Form_对话.Show
'如果就显示上行楼梯
' If 地图层号 = 20 Then '
m = Split(地图数据(11), ",")
'顺手修改地图'上楼
m(11) = 8
地图数据(11) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
' End If
End If
If 谈话对象.NPC对话标志_白娘子 = 1 And 对话窗口显示标志 = False Then
If Winner = False Then '闯关成功后的演出
对话窗口显示标志 = True
对话文件名编号 = 15
Form_对话.Show
Else
对话窗口显示标志 = True
对话文件名编号 = 20
Form_对话.Show
m = Split(地图数据(7), ",")
'顺手修改地图'上楼
m(6) = 16
地图数据(7) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
End If
End If
提示信息 = "~~~正在与白娘子对话~~~"
Case 16 '小青,对话
'谈话对象.NPC对话标志_小青=1 第一次场景对话,以此类推
通过标志 = False
If 谈话对象.NPC对话标志_小青 = 0 And 对话窗口显示标志 = False Then
谈话对象.NPC对话标志_小青 = 1: 对话窗口显示标志 = True
对话文件名编号 = 1
Form_对话.Show
'第一次对话结束后,得到黄红蓝钥匙各2把
勇者包裹.红钥匙数量 = 1
勇者包裹.黄钥匙数量 = 1
勇者包裹.蓝钥匙数量 = 1
'小仙女闪人
'End If
'If 谈话对象.NPC对话标志_小青 = 1 And 对话窗口显示标志 = False Then
m = Split(地图数据(9), ",")
m(5) = 16
地图数据(9) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
小青的移动.移动方向 = 3
通过标志 = True
谈话对象.NPC对话标志_小青 = 2
End If
If 谈话对象.NPC对话标志_小青 = 2 And 对话窗口显示标志 = False Then
对话窗口显示标志 = True
对话文件名编号 = 14
Form_对话.Show
End If
If 谈话对象.NPC对话标志_小青 = 3 And 对话窗口显示标志 = False And 勇者包裹.幸运十字架数量 = True Then
'得到十字架后的处理
If 勇者包裹.幸运十字架数量 = True Then
对话文件名编号 = 3: 对话窗口显示标志 = True: Form_对话.Show
人物信息.角色生命值 = 人物信息.角色生命值 + Int(人物信息.角色生命值 / 3)
人物信息.角色攻击力 = 人物信息.角色攻击力 + Int(人物信息.角色攻击力 / 3)
人物信息.角色防御值 = 人物信息.角色防御值 + Int(人物信息.角色防御值 / 3)
'显示22层的上行电梯
'小青消失
谈话对象.NPC对话标志_小青 = 4
m = Split(地图数据(9), ",")
m(5) = 1
地图数据(9) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
小青的移动.移动方向 = 3
通过标志 = True
End If
End If
If 谈话对象.NPC对话标志_小青 > 3 And 对话窗口显示标志 = False And 地图层号 = 24 Then
对话文件名编号 = 17: 对话窗口显示标志 = True: Form_对话.Show
谈话对象.NPC对话标志_小青 = 5
End If
提示信息 = "~~~正在与小青对话~~~"
Case 17 '小偷对话
'谈话对象.NPC对话标志_小偷=1 第一次场景对话,以此类推
通过标志 = False
If 谈话对象.NPC对话标志_小偷 = 0 And 对话窗口显示标志 = False Then
谈话对象.NPC对话标志_小偷 = 1: 对话窗口显示标志 = True
对话文件名编号 = 2
Form_对话.Show
End If
If 谈话对象.NPC对话标志_小偷 = 1 And 对话窗口显示标志 = False Then
对话窗口显示标志 = True
对话文件名编号 = 13
Form_对话.Show
End If
If 谈话对象.NPC对话标志_小偷 = 2 And 对话窗口显示标志 = False And 勇者包裹.铁榔头数量 = True Then
'将十八层路面修复
谈话对象.NPC对话标志_小偷 = 3
对话窗口显示标志 = True
对话文件名编号 = 4
Form_对话.Show
'小偷消失
m = Split(地图数据(1), ",")
m(6) = 1
地图数据(1) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
End If
提示信息 = "~~~正在与小偷对话~~~"
Case 18 '老人1:可以提升等级和体能等
通过标志 = False
If 谈话对象.NPC对话标志_老人 = 0 And 地图层号 = 4 Then '首次对话NPC
谈话对象.NPC对话标志_老人 = 1: 对话窗口显示标志 = True
对话文件名编号 = 6
Form_对话.Show
'送装备钢剑一把
人物信息.角色攻击力 = 人物信息.角色攻击力 + 30
提示信息 = "得到钢剑,攻击力+30点!"
End If
If 谈话对象.NPC对话标志_老人 = 1 And 地图层号 = 17 Then '17层对话的话,就用经验换攻击力NPC
谈话对象.NPC对话标志_老人 = 2: 对话窗口显示标志 = True
If 人物信息.角色的经验值 > 499 Then
对话文件名编号 = 8
Form_对话.Show
'经验换攻击
人物信息.角色的经验值 = 人物信息.角色的经验值 - 500
人物信息.角色攻击力 = 人物信息.角色攻击力 + 120
提示信息 = "使用经验值兑换了120点攻击力!"
'老人消失
m = Split(地图数据(4), ",")
m(5) = 1
地图数据(4) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
Else
对话文件名编号 = 10
Form_对话.Show
End If
End If
If 对话窗口显示标志 = False Then
If 地图层号 = 4 Then
商店对话ID = 2 '5层老人
Else
商店对话ID = 1 '12层老人
End If
商店对话窗口显示标志 = True
Form_商店.Show
End If
提示信息 = "~~~正在与神秘老人对话~~~"
Case 19 '商人:可以购买钥匙等
通过标志 = False
If 谈话对象.NPC对话标志_商人 = 0 And 地图层号 = 4 Then '首次对话
谈话对象.NPC对话标志_商人 = 1: 对话窗口显示标志 = True
对话文件名编号 = 7
Form_对话.Show
'送装备钢剑一把
人物信息.角色防御值 = 人物信息.角色防御值 + 30
提示信息 = "得到钢盾,防御力+30点!"
End If
If 谈话对象.NPC对话标志_商人 = 1 And 地图层号 = 17 Then '首次对话
谈话对象.NPC对话标志_商人 = 2: 对话窗口显示标志 = True
If 人物信息.角色持有的金币 > 499 Then
对话文件名编号 = 9
Form_对话.Show
'金币换防御
人物信息.角色持有的金币 = 人物信息.角色持有的金币 - 500
人物信息.角色防御值 = 人物信息.角色防御值 + 190
提示信息 = "得到光芒神盾,防御力+190点!"
'这个NPC要消失掉
m = Split(地图数据(4), ",")
m(7) = 1
地图数据(4) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
Else
对话文件名编号 = 11
Form_对话.Show
End If
End If
If 对话窗口显示标志 = False Then
If 地图层号 = 4 Then
商店对话ID = 4 '5层商人
Else
商店对话ID = 5 '12层商人
End If
商店对话窗口显示标志 = True
Form_商店.Show
End If
提示信息 = "~~~正在与神秘商人对话~~~"
Case 20, 21, 22 '商店
通过标志 = False
If 地图层号 = 5 Then
商店对话ID = 0 '3层商店
Else
商店对话ID = 3 '13层商店
End If
商店对话窗口显示标志 = True
Form_商店.Show
Case 24 '怪物手册:得到怪物的属性信息
勇者包裹.怪物手册数量 = True
提示信息 = "你得到了怪物手册,现在你可以自由查看怪物信息了!"
通过标志 = True
Case 25 '铸铁门:不可以破坏
提示信息 = "此门是铸铁门:不可以破坏!请绕路而行"
通过标志 = False
Case 30 '红宝石:攻击力+3
通过标志 = True
人物信息.角色攻击力 = 人物信息.角色攻击力 + 5
提示信息 = "角色的攻击力增加了5点!"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\宝石.wav")
播放音效.PlayWav myDSBuff(0), False
Case 31 '蓝宝石:防御力+3
通过标志 = True
人物信息.角色防御值 = 人物信息.角色防御值 + 5
提示信息 = "角色防御值增加了5点!"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\宝石1.wav")
播放音效.PlayWav myDSBuff(0), False
Case 32 '绿宝石:经验+30
通过标志 = True
人物信息.角色的经验值 = 人物信息.角色的经验值 + 30
提示信息 = "角色的经验值增加了30点!"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\宝石.wav")
播放音效.PlayWav myDSBuff(0), False
Case 33 '红血瓶:生命+200
通过标志 = True
人物信息.角色生命值 = 人物信息.角色生命值 + 300
提示信息 = "角色生命值增加了300点!"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\喝药.wav")
播放音效.PlayWav myDSBuff(0), False
Case 34 '蓝血瓶:生命+500
通过标志 = True
人物信息.角色生命值 = 人物信息.角色生命值 + 600
提示信息 = "角色生命值增加了600点!"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\喝药.wav")
播放音效.PlayWav myDSBuff(0), False
Case 35 '绿血瓶:生命+1000
通过标志 = True
人物信息.角色生命值 = 人物信息.角色生命值 + 1000
提示信息 = "角色生命值增加了1000点!"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\喝药.wav")
播放音效.PlayWav myDSBuff(0), False
Case 36 '圣水瓶:生命加倍
通过标志 = True
人物信息.角色生命值 = 人物信息.角色生命值 * 2
提示信息 = "角色生命值翻倍增加了!"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\喝药.wav")
播放音效.PlayWav myDSBuff(0), False
Case 37 '小钥匙盒:所有钥匙+1
通过标志 = True
勇者包裹.红钥匙数量 = 勇者包裹.红钥匙数量 + 2
勇者包裹.黄钥匙数量 = 勇者包裹.黄钥匙数量 + 2
勇者包裹.蓝钥匙数量 = 勇者包裹.蓝钥匙数量 + 2
提示信息 = "所有钥匙的数量都增加了2把"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\T3钥匙.wav")
播放音效.PlayWav myDSBuff(0), False
Case 38 '大钥匙盒:所有钥匙+3
通过标志 = True
勇者包裹.红钥匙数量 = 勇者包裹.红钥匙数量 + 5
勇者包裹.黄钥匙数量 = 勇者包裹.黄钥匙数量 + 5
勇者包裹.蓝钥匙数量 = 勇者包裹.蓝钥匙数量 + 5
提示信息 = "所有钥匙的数量都增加了5把"
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\T3钥匙.wav")
播放音效.PlayWav myDSBuff(0), False
Case 39 '黄钥匙
勇者包裹.黄钥匙数量 = 勇者包裹.黄钥匙数量 + 1
提示信息 = "得到一把黄钥匙!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\T3钥匙.wav")
播放音效.PlayWav myDSBuff(0), False
Case 40 '蓝钥匙
勇者包裹.蓝钥匙数量 = 勇者包裹.蓝钥匙数量 + 1
提示信息 = "得到一把蓝钥匙!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\T3钥匙.wav")
播放音效.PlayWav myDSBuff(0), False
Case 41 '红钥匙
勇者包裹.红钥匙数量 = 勇者包裹.红钥匙数量 + 1
提示信息 = "得到一把红钥匙!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\T3钥匙.wav")
播放音效.PlayWav myDSBuff(0), False
Case 42 '小飞羽:等级+1
人物信息.角色等级 = 人物信息.角色等级 + 5
人物信息.角色生命值 = 人物信息.角色生命值 + 5000
人物信息.角色攻击力 = 人物信息.角色攻击力 + 50
人物信息.角色防御值 = 人物信息.角色防御值 + 50
人物信息.角色持有的金币 = 人物信息.角色持有的金币 + 人物信息.角色持有的金币 + 50
人物信息.角色的经验值 = 人物信息.角色的经验值 + 500
提示信息 = "恭喜:升了5级!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\升级.wav")
播放音效.PlayWav myDSBuff(0), False
If 人物信息.角色攻击力 < 1 Then 人物信息.角色攻击力 = 1
If 人物信息.角色攻击力 > 2 ^ 62 - 1 Then 人物信息.角色攻击力 = 2 ^ 62 - 1
If 人物信息.角色防御值 < 1 Then 人物信息.角色防御值 = 1
If 人物信息.角色防御值 > 2 ^ 62 - 1 Then 人物信息.角色防御值 = 2 ^ 62 - 1
If 人物信息.角色生命值 < 1 Then 人物信息.角色生命值 = 1
If 人物信息.角色生命值 > 2 ^ 62 - 1 Then 人物信息.角色生命值 = 2 ^ 62 - 1
Case 43 '大飞羽:等级+3
人物信息.角色等级 = 人物信息.角色等级 + 10
人物信息.角色生命值 = 人物信息.角色生命值 + 10000
人物信息.角色攻击力 = 人物信息.角色攻击力 + 500
人物信息.角色防御值 = 人物信息.角色防御值 + 500
人物信息.角色持有的金币 = 人物信息.角色持有的金币 + 人物信息.角色持有的金币 + 500
人物信息.角色的经验值 = 人物信息.角色的经验值 + 5000
提示信息 = "恭喜:升了10级!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\升级.wav")
播放音效.PlayWav myDSBuff(0), False
If 人物信息.角色攻击力 < 1 Then 人物信息.角色攻击力 = 1
If 人物信息.角色攻击力 > 2 ^ 62 - 1 Then 人物信息.角色攻击力 = 2 ^ 62 - 1
If 人物信息.角色防御值 < 1 Then 人物信息.角色防御值 = 1
If 人物信息.角色防御值 > 2 ^ 62 - 1 Then 人物信息.角色防御值 = 2 ^ 62 - 1
If 人物信息.角色生命值 < 1 Then 人物信息.角色生命值 = 1
If 人物信息.角色生命值 > 2 ^ 62 - 1 Then 人物信息.角色生命值 = 2 ^ 62 - 1
Case 44 '铁锒头:开挖20层隐含路面
勇者包裹.铁榔头数量 = True
谈话对象.NPC对话标志_小偷 = 2
提示信息 = "你得到了铁榔头,赶紧交给小偷,开启20楼的隐藏路面!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\鼓.wav")
播放音效.PlayWav myDSBuff(0), False
Case 45 '星光神锒:开隐藏地面
勇者包裹.星光神锒数量 = True
提示信息 = "你得到了星光神锒,打开了机关,可以跟公主交谈了!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\鼓.wav")
播放音效.PlayWav myDSBuff(0), False
Case 46 '风之罗盘:自由穿越已走过的楼层
勇者包裹.风之罗盘数量 = True
提示信息 = "你得到了风之罗盘,现在你可以自由穿越已走过的楼层!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\风.wav")
播放音效.PlayWav myDSBuff(0), False
Case 47 '幸运十字架:提升所有能力
提示信息 = "你得到了幸运十字架,赶快拿给小青!"
通过标志 = True
勇者包裹.幸运十字架数量 = True
谈话对象.NPC对话标志_小青 = 3
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\幸运十字架.wav")
播放音效.PlayWav myDSBuff(0), False
Case 48 '金盘:金币+300
提示信息 = "恭喜:你得到了金盘,金币增加了300哦!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\金币.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色持有的金币 = 人物信息.角色持有的金币 + 300
Case 49 '圣光徽
提示信息 = "恭喜:你得到了圣光徽!英雄的生命、力量、防御各提升了500点!"
勇者包裹.圣光徽的数量 = 勇者包裹.圣光徽的数量 + 1
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\圣光徽.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色攻击力 = 人物信息.角色攻击力 + 500
人物信息.角色防御值 = 人物信息.角色防御值 + 500
人物信息.角色生命值 = 人物信息.角色生命值 + 500
通过标志 = True
If 勇者包裹.圣光徽的数量 > 3 Then 勇者包裹.圣光徽的数量 = 3
If 勇者包裹.圣光徽的数量 < 0 Then 勇者包裹.圣光徽的数量 = 0
If 人物信息.角色攻击力 < 1 Then 人物信息.角色攻击力 = 1
If 人物信息.角色攻击力 > 2 ^ 62 - 1 Then 人物信息.角色攻击力 = 2 ^ 62 - 1
If 人物信息.角色防御值 < 1 Then 人物信息.角色防御值 = 1
If 人物信息.角色防御值 > 2 ^ 62 - 1 Then 人物信息.角色防御值 = 2 ^ 62 - 1
If 人物信息.角色生命值 < 1 Then 人物信息.角色生命值 = 1
If 人物信息.角色生命值 > 2 ^ 62 - 1 Then 人物信息.角色生命值 = 2 ^ 62 - 1
Case 50 '铁剑:攻击力+10
提示信息 = "你得到了铁剑,攻击力增加了10点!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\刀剑.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色攻击力 = 人物信息.角色攻击力 + 10
If 人物信息.角色攻击力 < 1 Then 人物信息.角色攻击力 = 1
If 人物信息.角色攻击力 > 2 ^ 62 - 1 Then 人物信息.角色攻击力 = 2 ^ 62 - 1
Case 51 '钢剑:攻击力+30
提示信息 = "你得到了钢剑,攻击力增加了30点!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\刀剑.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色攻击力 = 人物信息.角色攻击力 + 30
If 人物信息.角色攻击力 < 1 Then 人物信息.角色攻击力 = 1
If 人物信息.角色攻击力 > 2 ^ 62 - 1 Then 人物信息.角色攻击力 = 2 ^ 62 - 1
Case 52 '青锋剑:攻击力+70
提示信息 = "你得到了青锋剑,攻击力增加了70点!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\刀剑.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色攻击力 = 人物信息.角色攻击力 + 70
If 人物信息.角色攻击力 < 1 Then 人物信息.角色攻击力 = 1
If 人物信息.角色攻击力 > 2 ^ 62 - 1 Then 人物信息.角色攻击力 = 2 ^ 62 - 1
Case 53 '星光神剑:攻击力+150
提示信息 = "你得到了星光神剑,攻击力增加了150点!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\刀剑.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色攻击力 = 人物信息.角色攻击力 + 150
If 人物信息.角色攻击力 < 1 Then 人物信息.角色攻击力 = 1
If 人物信息.角色攻击力 > 2 ^ 62 - 1 Then 人物信息.角色攻击力 = 2 ^ 62 - 1
Case 54 '铁盾:防御力+10
提示信息 = "你得到了铁盾,防御力增加了10点!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\铠甲.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色防御值 = 人物信息.角色防御值 + 10
If 人物信息.角色攻击力 < 1 Then 人物信息.角色攻击力 = 1
If 人物信息.角色攻击力 > 2 ^ 62 - 1 Then 人物信息.角色攻击力 = 2 ^ 62 - 1
Case 55 '钢盾:防御力+30
提示信息 = "你得到了钢盾,防御力增加了30点!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\铠甲.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色防御值 = 人物信息.角色防御值 + 30
If 人物信息.角色防御值 < 1 Then 人物信息.角色防御值 = 1
If 人物信息.角色防御值 > 2 ^ 62 - 1 Then 人物信息.角色防御值 = 2 ^ 62 - 1
Case 56 '黄金盾:防御力+80
提示信息 = "你得到了黄金盾,防御力增加了80点!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\铠甲.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色防御值 = 人物信息.角色防御值 + 80
If 人物信息.角色防御值 < 1 Then 人物信息.角色防御值 = 1
If 人物信息.角色防御值 > 2 ^ 62 - 1 Then 人物信息.角色防御值 = 2 ^ 62 - 1
Case 57 '光芒神盾:防御力+190
提示信息 = "你得到了黄金盾,防御力增加了190点!"
通过标志 = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\铠甲.wav")
播放音效.PlayWav myDSBuff(0), False
人物信息.角色防御值 = 人物信息.角色防御值 + 190
If 人物信息.角色防御值 < 1 Then 人物信息.角色防御值 = 1
If 人物信息.角色防御值 > 2 ^ 62 - 1 Then 人物信息.角色防御值 = 2 ^ 62 - 1
'特殊的怪要对话
Case 109 '红衣魔王
'谈话对象.NPC对话标志_红衣魔王=1 第一次场景对话,以此类推
通过标志 = False
If 谈话对象.NPC对话标志_红衣魔王 = 0 Then
谈话对象.NPC对话标志_红衣魔王 = 1: 对话窗口显示标志 = True
对话文件名编号 = 12
Form_对话.Show
End If
If 谈话对象.NPC对话标志_红衣魔王 = 1 And 对话窗口显示标志 = False Then
''显示战斗画面
战斗处理 (碰到的图块编号)
If 战斗胜利标志 = False Then
提示信息 = "怪物太强,你打不过!"
Else
通过标志 = True: Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\怪2.wav")
播放音效.PlayWav myDSBuff(0), False
End If
End If
'特殊的怪要对话
Case 110 '红衣大魔王
'谈话对象.NPC对话标志_红衣大魔王=1 第一次场景对话,以此类推
通过标志 = False
If 谈话对象.NPC对话标志_红衣大魔王 = 0 Then
谈话对象.NPC对话标志_红衣大魔王 = 1: 对话窗口显示标志 = True
对话文件名编号 = 16
Form_对话.Show
End If
If 谈话对象.NPC对话标志_红衣大魔王 = 1 And 对话窗口显示标志 = False Then
''显示战斗画面
战斗处理 (碰到的图块编号)
If 战斗胜利标志 = False Then
提示信息 = "怪物太强,你打不过!"
Else
通过标志 = True: Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\怪3.wav")
播放音效.PlayWav myDSBuff(0), False
End If
End If
'特殊的怪要对话
Case 111 '冥灵魔王
'谈话对象.NPC对话标志_冥灵魔王=1 第一次场景对话,以此类推
通过标志 = False
If 谈话对象.NPC对话标志_冥灵魔王 = 0 And 对话窗口显示标志 = False And 地图层号 = 28 Then
谈话对象.NPC对话标志_冥灵魔王 = 1: 对话窗口显示标志 = True
对话文件名编号 = 18
Form_对话.Show
'谈话对象.NPC对话标志_冥灵魔王 = 0
End If
If 谈话对象.NPC对话标志_冥灵魔王 = 1 And 对话窗口显示标志 = False Then
''显示战斗画面
战斗处理 (碰到的图块编号)
If 战斗胜利标志 = False Then
提示信息 = "怪物太强,你打不过!"
Else
通过标志 = True: 谈话对象.NPC对话标志_冥灵魔王 = 0
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\怪4.wav")
播放音效.PlayWav myDSBuff(0), False
End If
End If
'特殊的怪要对话
Case 113 '血影
'谈话对象.血影=1 第一次场景对话,以此类推
通过标志 = False
If 谈话对象.NPC对话标志_血影 = 0 And 对话窗口显示标志 = False Then
谈话对象.NPC对话标志_血影 = 1: 对话窗口显示标志 = True
对话文件名编号 = 19
Form_对话.Show
'谈话对象.血影 = 0
End If
If 谈话对象.NPC对话标志_血影 = 1 And 对话窗口显示标志 = False Then
''显示战斗画面
战斗处理 (碰到的图块编号)
If 战斗胜利标志 = False Then
提示信息 = "怪物太强,你打不过!"
Else
通过标志 = True: 谈话对象.NPC对话标志_血影 = 0: Winner = True
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\怪5.wav")
播放音效.PlayWav myDSBuff(0), False
End If
End If
Case 14
通过标志 = True
Case Else
通过标志 = False
战斗胜利标志 = False
战斗处理 (碰到的图块编号)
If 战斗胜利标志 = False Then
提示信息 = "怪物太强,你打不过!"
End If
Set myDSBuff(0) = 播放音效.LoadWav(App.Path & "\sound\怪1.wav")
播放音效.PlayWav myDSBuff(0), False
End Select
If 通过标志 = True Then
' 主角消失
地图数据串.主角所在行(地图数据串.主角所在列) = 1
m = Split(地图数据(男主角移动.x行), ",")
m(男主角移动.y列) = 地图数据串.主角所在行(地图数据串.主角所在列)
地图数据(男主角移动.x行) = m(0) & "," & m(1) & "," & m(2) & "," & m(3) & "," & m(4) & "," & m(5) & "," & m(6) & "," & m(7) & "," & m(8) & "," & m(9) & "," & m(10) & "," & m(11) & "," & m(12)
写临时地图数据 (0)
End If
男主角移动.移动速度 = 0
End Sub