回合制战斗 – 准确性检查

164次阅读
没有评论

共计 1736 个字符,预计需要花费 5 分钟才能阅读完成。

回合制战斗 – 准确性检查

TB-BattleAccuracyCheck.c3p
https://construct-static.com/tutorials/downloads/56165/tb-battleaccuracycheck.c3p
本教程基于上一个教程项目。基本结构是相同的,但我们将进行一些更改。如果您还没有看过上一个教程,那么值得一看,因为我只会解释对象和事件表的更新。

此示例文件保存在 C3 r239 中 – 请确保您使用 r239+ 打开它。

上一个教程中的项目是功能性的,但如果你把它融入到实际的游戏中,它会有点乏味——每个回合都造成同样的伤害变得有点可预测。添加准确性检查为战斗系统提供了另一个随机性元素。只需一次移动,就可以更轻松地添加单个准确性检查。

与上一个项目相比,需要对此项目中的对象进行一些更改。我们的两个战斗精灵现在有一个额外的实例变量 Acc,它将用于准确性检查。同样,这些可以是您选择的任何数字,我正在使用 100 刻度以匹配随机数函数(稍后将定义),因此两个变量设置为对手的 50 和玩家的 95。希望这将更好地展示准确性检查的实际效果!

BattleText 文本对象现在称为 BattleEnd,并且有一个名为 HitStatus 的新文本对象。HitStatus 还带有 Timer 行为。

说到计时器行为,这也是一个很好的机会,可以看看战斗系统中控制回合状态的其他方法。在上一个项目中,我们使用 Flash 行为来确定何时在玩家和对手回合之间切换。但是,引入可能错过的攻击的概念意味着这并不总是有效。因此,在这个项目中,Flash 行为纯粹是美学上的——转向控制是使用 Timer 行为完成的。

在上一个项目中,当 Flash 行为停止闪烁时,会调用 turn 函数,现在它被 Timer 触发器替换:
回合制战斗 - 准确性检查

我们还将更改攻击函数的某些部分以包含计时器行为,但我将通过更改来涵盖这些更改以适应准确性检查。但在我们开始之前,我们需要添加一个新功能。准确性检查需要一个随机数才能工作,因此我们将为此使用一个函数和一个全局变量。确保将名为 RandomNumber 的全局数字添加到您的事件表中。

接下来,我们将使用一个函数在需要时将变量设置为随机数:

条件

启用函数 RandomNumberGen

行动

系统︎ ▶ 将 RandomNumber 设置为 int(random(0,101))
回合制战斗 - 准确性检查

现在,每当我们调用此函数时,RandomNumber 变量将被重置。

与上一个项目一样,这两个攻击函数非常相似,因此我们将介绍其中一个,并使用屏幕截图来说明第二个。从 OppAtt 函数开始:

OppAtt(奥普阿特)

首先,我们检查对手是否有任何 HP – 如果他们的 HP 值为 0,则函数将不会运行。

条件

开启功能 OppAtt

行动

HitStatus ▶︎ 将文本设置为“”

函数 ▶︎ 调用 RandomNumberGen

子事件条件

对手 ▶︎ 生命值 > 0

子事件条件

系统︎ ▶ 不是 PlayerMoved

子事件操作

系统 ▶︎ 将 NextAction 设置为“PlayerMove”

子事件条件

系统 ▶︎ 比较两个值 ▶︎ RandomNumber ≤ Opponent.Acc

子事件操作

系统 ▶︎ 将 CurTurn 设置为“Opp”

系统 ▶︎ 将 OppMoved 设置为 True

HitStatus ▶︎ 将文本设置为“Attack hit!”

玩家︎ ▶ 将 HP 设置为 Self.HP-Opponent.Attack

播放器 ▶︎ 闪光灯 ︎ 闪光 ▶ 灯亮 0.1 秒 熄灭 0.1 秒 1 秒

HitStatus ▶︎ 计时器 ▶︎ 启动计时器“NextMove”1.0 秒

子事件条件

系统 ▶︎ 比较两个值 ▶︎ RandomNumber > Opponent.Acc

子事件操作

系统 ▶︎ 将 CurTurn 设置为“Opp”

系统 ▶︎ 将 OppMoved 设置为 True

HitStatus ▶︎ 将文本设置为“攻击未命中!”

HitStatus ▶︎ 计时器 ▶︎ 启动计时器“NextMove”1.0 秒
回合制战斗 - 准确性检查
和以前一样,PlayerAtt 函数本质上是相同的,但针对播放器对象:
回合制战斗 - 准确性检查

因此,通过这些小的改动,我们有一个稍微更强大的战斗系统,其中包括拥有具有不同准确性统计数据的战斗人员的能力。这为系统引入了更多的随机性,使其更有趣一些!

课程的下一章将着眼于添加伤害计算,以改变一些事情,而不是仅仅使用攻击属性作为伤害值。

正文完
 0
评论(没有评论)