魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~19开始游戏-战斗处理

魔塔之拯救白娘子 完整工程下载地址:
《魔塔之拯救白娘子》流程分析5:战斗处理
这个游戏的战斗系统比较简单,就是对比双方的数据,打的过就显示打斗过程,打不过就提示“打不过”,绕路而行,,,,笑哭
下边是战斗处理子程序:

Sub 战斗处理(怪物编号 As Integer)
Dim k As Integer
Dim K2 As Long
Dim n() As String

'战斗
'①判断是否能打过,不能打过就提示:打不过
n = Split(怪物信息(怪物编号 - 79), ",")  '读取怪物数据
怪物相关属性.怪物名 = n(0)
怪物相关属性.怪物生命值 = n(1)
怪物相关属性.怪物攻击力 = n(2)
怪物相关属性.怪物防御值 = n(3)
怪物相关属性.怪物持有的金币 = n(4)
怪物相关属性.怪物的经验值 = n(5)

k = 人物信息.角色攻击力 - 怪物相关属性.怪物防御值 ')Int(
    If k < 0 Then Exit Sub
    If k = 0 Then k = 1
        
     '②可以打那就显示战斗画面(可以设置显示/关闭 战斗画面)
    
    
        k = 怪物相关属性.怪物生命值 / k ')Int(
        K2 = 怪物相关属性.怪物攻击力 - 人物信息.角色防御值
        K2 = k * K2 + K2

        If K2 > 人物信息.角色生命值 Then Exit Sub   '打不过就提示
        战斗开始标志 = True
        
        
        Form_战斗.Show
        
       
        
        延时 (1000)

 Unload Form_战斗
提示信息 = "太厉害了,你赢得了一场战斗!"
通过标志 = True
战斗开始标志 = False
 
End Sub

战斗处理子窗口:(设计界面)
战斗处理子窗口

代码:

Option Explicit

Private Sub Form_Load()
'获得主窗口的坐标
     Me.Left = frmMain.Left + 1000
     Me.Top = frmMain.Top + 3000
    
    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)
'取消窗口在顶层
'rtn = SetWindowPos(F_V.hwnd, -2, 0, 0, 0, 0, 3)
    战斗信息显示
    Timer1.Enabled = True
End Sub

Sub 战斗信息显示()


Label_怪物名字 = 怪物相关属性.怪物名
Label_怪物生命值 = "生命值:" & 怪物相关属性.怪物生命值
Label_怪物攻击力 = "攻击力:" & 怪物相关属性.怪物攻击力
Label_怪物防御力 = "防御力:" & 怪物相关属性.怪物防御值
Label_怪物金币 = "金  币:" & 怪物相关属性.怪物持有的金币
Label_怪物经验值 = "经验值:" & 怪物相关属性.怪物的经验值

Label_男主角生命 = "生命值:" & 人物信息.角色生命值
Label_男主角攻击力 = "攻击力:" & 人物信息.角色攻击力
Label_男主角防御力 = "防御力:" & 人物信息.角色防御值

End Sub

Sub 战斗过程()
'损失计算方法:
'【怪物生命÷(自己攻击力-怪物防御力)-1】×(怪物攻击力-自己防御力)=损失。
'如果怪物先攻就不-1了

    
    Dim k As Long, K2 As Long
    
   ' Dim lLife As Long
    
   ' lLife = 怪物相关属性.怪物生命值
 Do While 怪物相关属性.怪物生命值 > 0
     DoEvents
     
        k = 人物信息.角色攻击力 - 怪物相关属性.怪物防御值 '(自己攻击力-怪物防御力)
        If k < 0 Then k = 0
        k = Rndnum(k, k + 10)
        
        怪物相关属性.怪物生命值 = 怪物相关属性.怪物生命值 - k '怪物失血(人物攻击带随机暴击属性)
        
       
       
        
        If 怪物相关属性.怪物生命值 < 0 Then 怪物相关属性.怪物生命值 = 0 ': Exit Do
    
        'If 怪物相关属性.怪物生命值 > 0 Then
            K2 = 怪物相关属性.怪物攻击力 - 人物信息.角色防御值 '怪物攻击力-自己防御力
            If K2 < 0 Then K2 = 0
            
            人物信息.角色生命值 = 人物信息.角色生命值 - K2 '自己失血
            
             Label_战斗记录显示 = ""
             Label_战斗记录显示 = "怪物失去了" & k & "点生命!"
             Label_战斗记录显示 = Label_战斗记录显示 & vbCrLf & "英雄失去了" & K2 & "点生命!"
            
       ' End If
        战斗信息显示
        
      
      延时 (20)
    Loop


    人物信息.角色持有的金币 = 人物信息.角色持有的金币 + 怪物相关属性.怪物持有的金币
    人物信息.角色的经验值 = 人物信息.角色的经验值 + 怪物相关属性.怪物的经验值
    
   战斗胜利标志 = True
   Timer1.Enabled = False


End Sub




Private Sub Timer1_Timer()
战斗过程
End Sub

Private Sub Timer2_Timer()
If frmMain.WindowState = 1 Then
Me.Hide
Else
Me.Show
End If
If Me.Left - 1000 <> frmMain.Left Then Me.Left = frmMain.Left + 1000
     If Me.Top - 3000 <> frmMain.Top Then Me.Top = frmMain.Top + 3000
End Sub

猜你喜欢

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