如何用Excel做一个战斗模拟器(一)升级经验表
如何用Excel做一个战斗模拟器(二)属性表
定义战斗子过程
在VBE中定义一个战斗子过程,每次战斗开始就调用这个子过程。战斗子过程应包含以下内容:
- 接收战斗双方的各类属性,如等级、血量、攻击、防御、暴击、闪避;
- 模拟并输出战斗过程,如人物攻击对怪物造成N点伤害;怪物攻击未命中等;
- 输出战斗结果,如怪物当前血量0,玩家胜利
明确了需求后,我们就可以开始代码的编写,首先定义子过程,这个子过程是需要参数的。rl代表玩家等级,ml代表怪物等级。因为我们还希望这个模拟器能模拟1V多的战斗以验算我们设定的战斗强度是否成立,所以我们还需要一个num参数传递怪物的数量。具体代码如下
//定义一个战斗的子过程
Sub Fight(rl As Integer, ml As Integer, num As Integer)
……
……
End Sub
接下来战斗过程的代码均书写在这个战斗子过程里
定位战斗双方基础属性
根据rl、ml两个参数,在“人物属性表”与“怪物属性表”中查找战斗双方的属性并定义相关变量用于接收。
'定义一个战斗的子过程
Sub Fight(rl As Integer, ml As Integer, num As Integer)
'定义变量接收人物属性
Dim rolesheet As Worksheet, rhp As Long, ratt As Long, rdef As Long, rblock As Long, rmiss As Long
'定位到人物属性表
Set rolesheet = Worksheets("人物属性表")
'用for循环找到人物属性表中对应等级的人物属性
Dim i As Integer
i = 1
Do While rolesheet.Cells(i, 1) <> ""
'找到玩家等级,开始赋值
If rolesheet.Cells(i, 1) = rl Then
rhp = rolesheet.Cells(i, 2)
ratt = rolesheet.Cells(i, 3)
rdef = rolesheet.Cells(i, 4)
'暴击属性
rblock = rolesheet.Cells(i, 5)
'闪避属性
rmiss = rolesheet.Cells(i, 6)
'找到了就立刻跳出循环
Exit Do
Else
'若不是玩家等级,继续向下查找
i = i + 1
End If
Loop
'重置变量i以供下一次循环
i = 1
'定义变量接收怪物属性
Dim msheet As Worksheet, mhp As Long, matt As Long, mdef As Long, mblock As Long, mmiss As Long, mallhp As Long
'定位到怪物属性表
Set msheet = Worksheets("怪物属性表")
'用For循环找到怪物属性表中对应等级的怪物属性
Do While msheet.Cells(i, 1) <> ""
'找到怪物等级,开始赋值
If msheet.Cells(i, 1) = ml Then
mhp = msheet.Cells(i, 2)
matt = msheet.Cells(i, 3)
mdef = msheet.Cells(i, 4)
'暴击属性
mblock = msheet.Cells(i, 5)
'闪避属性
mmiss = msheet.Cells(i, 6)
'MsgBox "怪物的HP为" & mhp
Exit Do
Else
'若不是怪物家等级,继续向下查找
i = i + 1
End If
Loop
End Sub
利用基础属性与战斗公式进行计算
利用双方的基础属性我们可以得到玩家与怪物的伤害、暴击率、闪避率。而我们定义mallhp怪物总血量=单只怪物血量*怪物数量
'定义变量接收玩家与怪物的伤害,暴击率与闪避率
Dim rdam As Long, mdam As Long, rBloc