RogueLikeゲームでさまざまなアクション速度を管理する方法は?


14

RogueLikeゲームでさまざまなアクション速度を管理する方法は?

つまり、ターンベースのゲームでは、アクションやその他の特性に応じて、異なる「速度」で行動する俳優がいる場合があります。アクターは、スピードが速いかどうかによって、他のアクションよりも効果的にアクション/ターンを行います。

アクターが行動できるようになる時期を決定する方法(スケジューリングを変える?)

それを行うにはさまざまな方法があるように見えますか?アルゴリズムでいくつか説明できますか?


7
必要な機能を詳細に説明すると、アルゴリズムが明らかになると感じています。
12

Tetradが言ったように、プラス「アクションの速度」とはどういう意味ですか?ローグライクは通常ターンベースであるため、これがどのように適用されるかはわかりません。
ローランクーヴィドゥ

2
ターンベースのゲームであっても、一部のエンティティは他のエンティティよりも速くまたは遅く移動し、他のエンティティと比べて多かれ少なかれターンを持ちます。質問を修正しました。
クライム

3
@Patrick Hughes Nethackは、最も古く、最も人気のあるローグライクの1つであり、非常に重要な速度属性を持っています。nethackwiki.com/wiki/Speed
ハリースターン

1
@HarryStern私はこれまでずっとプレイしていませんか?それはいくつかのことを説明するかもしれません... =)
パトリックヒューズ

回答:


12

ローグライクゲームTyrantでは、アクションポイントとスピードレーティングのシステムを使用しました。

基本的に:

  • ほとんどのアクションのAPコストは100でした
  • ほとんどのクリーチャーの速度は100です

その後、ゲームループは次のようになります。

  • ヒーローは行動を起こします。
  • 経過時間は次のように計算されます hero action AP cost * 100 / hero speed
  • すべてのクリーチャーに等しいAPが与えられます creature speed * elapsed time / 100
  • クリーチャーはアクションを実行し、APが0以下になるまでAPを減算します
  • 繰り返す

このシステムは全体的に非常にうまく機能し、素晴らしい機能の例は次のとおりです。

  • あなたが非常に速いヒーローを持っている場合(おそらく魔法の速度ボーナスのため)、個々のクリーチャーが移動する前にいくつかの動きを得ることができます(経過時間が短いため、APは数ターンの間負になります)
  • APのコストを変更することで、アクションのコストを増減できます
  • APを差し引くことでクリーチャーを遅らせたり、APを追加することで突発的な1回限りのブーストを与えることができます

これを頭で包もうとしています。1人のプレイヤーと4人のプレイヤーがいる場合。これにより、最後のプレイヤースタックの経過時間がますます長くなりません。彼に多分4つのアクションをとることを許可し、2回目は8回連続で??
Dr.Denis McCracleJizz

4

アクションポイント。各エンティティに「速度」を与えて、より速い俳優がターンごとにより多くのポイントを獲得できるようにします。各アクションが完了するために特定のポイント数を取るようにし、彼がアクションを取るときにそのターンのプレイヤーのポイントからその数を引きます。プレイヤーが残したよりも多くのポイントをアクションが取る場合、「部分的に完了」としてマークし、次のターンでそれを終了させます。


2

アクションが複数のターンを取ることを意味しますか(つまり、50ターンまっすぐ寝ます)。

私がすることは、オブジェクトplayer.currentActionを保持することです。currentActionには、アクションに必要なターン数、アクションの解決方法、およびアクションをキャンセルする状態のリスト(危険、攻撃を受けている、暑すぎるなど)が含まれる場合があります。各ターン、プレイヤーの入力を確認する前に、プレイヤーが現在アクションの最中であるかどうかを確認し、次のようなことをします...

if(!player.currentAction.interrupted())
{
 if(player.currentAction.complete() == true)
   {
    player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
    player.currentAction = null;
   }
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else 
{
 player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
 player.currentAction = null;
}

2

アクションポイントを使用できますが、ターン自体はありませんが、ティックは非常に小さくなります。すべてのアクターにアクションポイントの蓄積速度(たとえば、ティックごとに2 AP)があるとします。たとえば、10 APに相当するアクションを開始します。ゲームは5ティック先に進みます(これは、俳優がアクションのAP価格を支払うのにどれだけかかるかです)。

俳優が複数いる場合。このアクションが実行されるポイントで誰かがAPの価格を支払うまで、ゲームはティックごとに進みます。

アプローチは@mikeraに似ていますが、負のAPはありません。


クリーチャーの「意図した」アクションを保存する必要があるため、これははるかに面倒です。一部のアクションは、Mobが十分なポイントを蓄積する前に変化する可能性のある状態に依存しています。
ワーウィックアリソン

完璧ではないかもしれませんが、実際の生活を反映しているので、ヒットすることを決めたら、最初にスイングしてからヒットします。したがって、このシステムで許可されるのは意思決定準備アクションです。また、これにより、実際の状況に基づいてブロックアクションを選択できます。
zzandy

私は他の方向に行くことを好みます:mobはn-ticksのコストでアクションを選択し、n-ticksが経過するまで新しいアクションを選択できません。ティックごとに減分される単一の値として実装できます。
kitsu.eb

-1

高解像度時間

パンチが400ターンかかり、キックが1000ターンかかる場合、私を蹴る前に少なくとも2回パンチすることができ、2回蹴るまでに5回パンチすることができます。

物事に多くのターンを行わせることにより、物事にかかる時間を多く制御できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.