欢迎来到第四部分,这一次我们将不会学习有关Vue的特定概念,而会了解特定的神奇宝贝攻击伤害计算方法。
我敢肯定,您从上一篇文章中已经注意到,宠物小精灵的攻击造成的伤害要大于某些宠物小精灵。 您可能还错过了一个事实,那就是原始游戏并不总是会带来相同的损失。
起初,损害公式似乎令人生畏,但让我们逐个细分
伤害公式
为了计算攻击的损失,我们必须考虑很多事情:
- 等级:攻击口袋妖怪的等级
- 力量:攻击的力量
- 答:攻击口袋妖怪的攻击统计信息(如果是物理类型)或特殊统计信息(如果是特殊攻击,则会增加状态效果)。
- D:防御口袋妖怪的防御状态。
我们将在下一步中讨论修饰符。
修饰语公式
- STAB:相同类型攻击奖金的缩写,表示如果攻击类型是口袋妖怪之一,则添加奖励。
- 类型:将通过图表将攻击类型与防御口袋妖怪的类型进行比较。 该图表说明了类型之间的攻击将如何有效。 (0表示无效,0.5表示弱效,2表示超级有效)。
- 暴击:会增加两倍的伤害,其发生的可能性取决于口袋妖怪的等级和速度。
- 其他:这是来自物品的修饰语,或可能在特定的攻击情况下发生。 在大多数情况下,这只是1。
- 最后,在85%和100%之间应用随机百分比
实作
让我们将战斗公式转换为可以在组件中使用的Damage类。
型号表
我们还需要列出每种类型的弱点和强度,以计算类型的有效性。
让我们创建一个数据文件夹,在该文件夹中创建一个名为typeChart.js的文件,并将以下文件放置在其中:
每种类型都包含一个具有3个属性的对象:
- 免疫:针对这些类型的攻击将造成零伤害。
- 弱点:针对这些类型的攻击将造成一半的损失。
- 优点:针对这些类型的攻击会造成双倍伤害。
伤害等级
让我们回到src文件夹并创建一个名为Damage.js的文件。
我们将在这里创建我们的课程。
之所以在一个类中定义损害计算,是因为我们可以将代码拆分为多个函数,每个函数都有自己的责任。 这使阅读和维护代码更加容易。
让我们深入研究一下,通过构造函数,我们需要为该类分配一些基本属性,例如攻击中的宠物小精灵,防御中的宠物小精灵以及正在使用的攻击定义。 我们还将导入char类型以便于参考。
接下来,让我们在名为calculateStatsPower的类中创建一个新方法,在这里我们将转换损坏公式,不包括修饰符:
接下来,我们将开始定义修饰符,每个修饰符都有其自己的方法。
让我们开始计算STAB:
还记得pokedex.json文件吗? 每个宠物小精灵都有一个类型属性,即数组。 在这里,我们只是检查攻击类型是否存在。
接下来让我们计算文字效果。 我们必须检查攻击的类型,以了解优缺点。 我们将针对对手口袋妖怪的每种类型执行此操作:
让我们继续计算关键命中率,这是一个灾难。
计算实际修饰符并不难。 如果发生这种情况,则修正者的力量取决于攻击中的宠物小精灵的等级(等级越高的宠物小精灵应该获得的奖励越大)。
我们还必须创建一个随机数(0–255),以使关键命中率降低该随机数应低于阈值。
此阈值将基于攻击神奇宝贝的速度。 如果攻击类型是正常的,我们将速度除以512,如果是其他攻击类型,则将攻击宠物小精灵的速度除以256。
这样,普通攻击只有一半的机会提供致命一击。
我们还没有真正实现的另一个修饰符,因为我们没有能够增强效果的项目或攻击。 无论如何,我们将定义方法并仅返回1。
让我们在称为“ power ”的方法中调用所有这些计算方法,这是我们唯一要从外部调用的方法。
定案
最后但并非最不重要的一点是,我们将损坏类导入Pokemon.vue中,并替换旧的calculateDamage方法的内容。
在import语句之后,我们已经为Vuex帮助器准备好了:
我们将用下面的方法替换calculateDamage方法:
就是这样,我们现在已经完成了对口袋妖怪的攻击。
您仍然可以实施“分类攻击”,原始游戏提供:正常,特殊和状态为攻击类别。 在Damage类的calculateOther和calculateStatsPower方法中为他们实现战斗逻辑。 可以考虑物品效果,在多阶段攻击中进行编程,您可以随意做任何想做的事情。
在下一篇文章中,我们将研究动画和过渡效果,还将开始显示攻击效果,例如“严重击中”,“非常有效”,“不太有效”和“没有效果”。 我们还将显示已造成的损坏。
您可以在github上找到代码,本文特有的代码已发布在第4章分支下。
happyDemon /通过口袋妖怪学习
learning-vue-through-pokemon –此存储库包含我的教程系列“通过pokemon学习Vue.js”的代码github.com
如果您有任何疑问或建议,只需在回购单上打开一张票,我一定会解决的。