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