La Torre Mágica de Salvar a la Dama Blanca ~ Mi primer código fuente de juego pequeño hecho por VB6 + DX8 ~ 19 comienza el manejo de la batalla del juego

El proyecto completo de
"Magic Tower: Saving the White Lady"
enlace de descarga: "Magic Tower: Saving the White Lady" Análisis del proceso 5: Procesamiento de combate El sistema de batalla de este juego es relativamente simple, que consiste en comparar los datos de ambas partes, después de la pelea, mostrará el proceso de lucha. Indicación "no puede vencer", desvío ,,,, la Reir y llorar
siguiente es la subrutina de manejo de batalla:

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

Subventana de manejo de batalla: (interfaz de diseño)
Subventana de manejo de batalla

Código:

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

Supongo que te gusta

Origin blog.csdn.net/gosub60/article/details/112862663
Recomendado
Clasificación