魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~18开始游戏-物体碰撞检测

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

猜你喜欢

转载自blog.csdn.net/gosub60/article/details/112862230