文本描述
对于数学问题,自己想出答案和确认别人的答案是否正确,哪一个更简单 设计别人解不开的谜题和解开那个问题,何者更难? 开篇两句与本篇主题关系并不密切,只为吸引点击。。 这篇稿子会简单介绍如何制作一个战斗模拟器。战斗模拟器可能很多人做过或者尝试做 过。战斗模拟器在对某些量化较难的战斗类型,可以起到验证作用(也只是如此而已)。 制作一个战斗模拟器还是有些微门槛的——0 基础需要约 5~8 小时左右的 VBA 学习。 而在制作过程中,可以对已掌握的 VBA 知识进行一番实战,也可以让自己对战斗设计的细 节部分想的更加透彻。 制作准备: ? ? ? 基础 VBA 知识 处于网络环境(用于临时搜索查询) 对战斗系统的足够了解 需求整理: 本次制作的模拟器,模拟的是一个 7 宫格的卡牌对战(可想象为 2 个队伍分别“凸”对 方): ? ? 统计若干次战斗的胜负,计算出胜率% 战斗日志,对于战斗中的攻击/技能的发动,展示其伤害值及相应的被攻击单位 的血量变化,以及相应的发动技能所消耗的怒气/能量值的变化情况。 支持对技能的攻击目标顺位规则自定义。 ? ? 虽然为讲述方便,本文介绍的是不带 buff 的战斗情形,但考虑到代码的复用性, 本模拟器应支持较少的代码改动即可支持 buff 的添加和删除。 ? ? 同上,虽然本例经简化没有进行暴击/命中等判定,但实际上可以三两行代码添 加该功能。 战斗界面应是一个独立的窗体,否则在 sheet 里容易在操作时发生各种异常。 成品展示: 开始制作: 我们先把模拟器拆成 4 个部分: 1.配置部分 2.属性展示 3.战斗过程 4.战报展示 1.1.配置部分 这部分分 2 块,1 个是上阵的卡牌配置,另 1 个是技能配置,分别如下: 技能表的 e/f/g 列分别代表技能在位于上中下路释放技能时,选择目标的位置编号 的优先顺序。 1.2.属性展示 ALT+F11 呼出 VBE 窗口,创建一个 userform,使用 2 个 listbox 用以读取配置中的武将列表, 其余控件类型见下图: 补充说明,插入用户窗体的方法见下图: 1.3.战斗过程 这部分大概是最繁琐的。 先介绍一个概念——集合对象。 1.3.1. 集合对象 Office 2013 and later Collection 对象是可作为一个单元引用的已排序的项目集合。 注释 Collection 对象提供了一种将一组相关项目当作单个对象的便捷方式。集合中的项目或成 员只需要根据它们存在于该集合中这一事实进行关联。集合的成员不必具有同一数据类型。 可以采用创建其他对象的相同方法来创建集合。例如: Dim X As New Collection 集合创建后,可使用 Add 方法添加成员或使用 Remove 方法删除成员。使用 Item 方法 可从集合中返回特定成员,而使用 For Each...Next 语句可循环访问整个集合。 通过使用集合对象,我们可以把双方的武将分别放进 2 个集合中,这样可以方便的使用 for each 循环语句,挨个行动,当然也可以在将来扩展出“速度”属性时,对武将集合进行速度的 排序。以下是回合循环的部分代码(完整代码会附件方式放在最后) 1.3.2. 类模块 。。。以下略