攻撃ダメージアルゴリズムのアイデア(言語は関係ありません)


8

私はゲームに取り組んでおり、プレイヤーが攻撃したときに敵に与えられるダメージについてのアイデアが必要です。敵が持っているヘルスの合計量はと呼ばれenemyHealth、値は1000です。最初に、40ポイントのダメージを与える(変更される場合があります)武器から始めますplayerAttack。この値は1から始まり、何度もレベルを上げてゲームの奥まで行った後の最大値は100です。武器が与えるダメージ量はカットされて乾き、敵がヒットするたびに合計1000ポイントのヘルスから40ポイントが差し引かれます。しかし、何をするかはplayerAttack、パーセンテージでその値に追加することです。これが私が今持っているアルゴリズムです。(私はすべてのGUI、クラスなどを取り出し、変数に非常に前向きな名前を付けました)

double totalDamage = weaponDamage + (weaponDamage*(playerAttack*.05))
enemyHealth -= (int)totalDamage;

これはほとんどの部分でうまく機能するように見えました。だから私はいくつかの値をテストすることを定めました...

//enemyHealth ALWAYS starts at 1000
weaponDamage = 50;
playerAttack = 30;

これらの値を設定すると、敵に与えられるダメージ量は125になります。良い数値のように見えたので、プレイヤーの攻撃が最大になり、開始武器が最も弱い場合にどうなるかを確認したいと思いました。

weaponDamage = 50;
playerAttack = 100;

totalDamageは300になり、数回のヒットで敵を殺します。あなたの攻撃がそんなに高いとしても、私は最も弱い武器が敵をそれほど速く殺せるようにしたくないでしょう。防御を追加することを考えましたが、長期的にはゲームの一貫性が失われ、アンバランスになると思います。おそらく、武器減少モディファイアの適切に設計されたアルゴリズムは、低レベルの武器やそのようなもので機能します。これに対処するための最良の方法を見つけようとすることから少し離れてください。ゲームの経験があり、レベリングを一貫して維持している誰かが私にいくつかのアイデア/ポインタを与える可能性があります。


2
もう少し情報が必要だと思います。playerAttackステータスを100 に平準化するのは簡単ですか?これが最大値であることを考えると、数ヒットで敵を殺すことは適切ではないでしょうか?(1000-HPの敵は、ゲームの最初に目にするものですか?標準的な敵ですか?ボスですか?)
Lee

回答:


14

GrzegorzSławeckiによって提供された答えはすでに良いものですが、彼の方法の背後にある理論的根拠を説明し、ソリューションをゲームプレイのニーズに適合させるためのツールを提供したいと思いました。

現在の問題のパラメーターは、プレーヤーの攻撃レベルa、武器のダメージw、1回の攻撃で与えられた合計ダメージd、敵のヘルスH、敵を倒すのに必要な最小ヒット数です。これをnと呼びましょう。

プレーヤーをnヒットで殺したい場合、その合計ダメージdは次のようになります。

(n-1).d <H≤nd    、つまりn = ceil(H / d)

dが武器ダメージに依存wは、プレイヤーの攻撃レベルでAと我々はそうの書き込みましょう、武器はよりよいレベルが高くなるにつれて得ることを期待することができ、D()()wは、単にの代わりにdをwは。プレイヤーが直面している敵もまたタフになると予想されますので、再びH(a)です。これらはすべての増加する関数であり、上記の不等式を満たすようにしたい。問題の未知数は関数です。1つを制約として設定し、他のものを見つけます。ただし、自由度はあります。これは良いことです。

あなたの質問をよく理解していれば、正確なゲームプレイを念頭に置いており、このゲームプレイは主に、敵を倒すために必要なヒット数n(a)によって表されます。したがって、ゲームに想定するゲームプレイに応じてn(a)を設定し、問題の残りの変数を見つけます。あなたの質問が示すように、あなたの最初の試みはあなたが考えているかもしれないアルゴリズムを試すことであり、それが望ましくないゲームプレイをもたらすことに気づいたので、これはあなたが常にすべきことです。

たとえば、プレーヤーがゲームを進行するにつれて、より多くの回数ヒットする必要があるとします。また、必要なヒット数が増えると、増加する頻度が減るので、プレーヤーはゲームの長い部分を2回よりも5回多くヒットします。ここでは何のn()のようになります。

望ましいn(a)

使用される関数はn(a)= ceil(2 / 3.sqrt(a))です。

我々が望むH()/ D()作成すること値の範囲内に留まるため、N()を所望の値とするので有するN()= CEIL(H()/ D())これらの範囲、以下の長方形です:

n(a)およびn(a)-1

及びH()/ D()天然に設定することができる()2 / 3.sqrtので、我々は赤い曲線があると、次のグラフを得ること()H()/ D

n(a)、n(a)-1およびH(a)/ d(a)

備考:ここでH(a)/ d(a)を簡単に見つけることができます。これは、n(a)がceil である関数がわかっているためです。ただし、nの指定があまり適切でない場合は、独自のフィッティングを行う必要があります。さまざまなトリックを使用して機能します。すべての問題がこれで良いとは限りません!

したがって、H(a)/ d(a)をカスタマイズされた平方根関数のようにしたいとし、Hdは増加する関数でなければならないことを知っています。ソリューションは豊富です。例えば、

H(a)= aです。2 / 3.sqrt(a)    および    d(a)= a

Hとdの最初の解

ただし、ダメージと敵のHPを大幅に増やして、ゲームの終わりにスタイルのためだけに大きく印象的な数字を表示させたいので、代わりに

H(a)=a²。20 / 3.sqrt(a)    および    d(a)=10.a²

Hとdのより良いソリューション

重要な点、そして最良の部分はこれです。問題の解決策(H(a)およびd(a))が仕様(n(a))に従っていることを知っているので、同じn(a)が得られます。、しかしあなたには自由があります。あなたは自分の自由を正確に知っており、それを使用してエクスペリエンスをカスタマイズできます。可能な限り、いつでも自分の最も重要なニーズを満たしながら、常に自分にそのような自由を与えようとする必要があります。

今、私たちは1ヒットダメージ選択したことをD() 、およびので、D()武器ダメージに依存()ワット、我々が使用することができますD()弊社指定のように探してみてくださいワット(Aを)これにより、このd(a)が得られます。原則は同じですが、問題は異なります。武器が同じでも、レベルが上がるにつれ、プレーヤーにもっと大きなダメージを与えたいです。また、武器だけが良くなり、レベルが変わらないときにもダメージを増やしたいです。同じ。

しかし、各要素にはどのような重要性がありますか?バリエーションの大きな一部:我々はレベルが武器よりも重要になりたいと仮定()= A 2はDから独立している必要があります()ワットで、たとえば、

w(a)= 22.sqrt(a)    、したがって、    d(a)=(22.sqrt(a))。(10 / 22.a.sqrt(a))= w(a)。(10 / 22.a.sqrt(a))

w(a)について次のグラフが得られます...

w(a)

...と、まだ同じD() 、我々は再び仕様に従った解決策見つけたので、ここではD() 、と私たちは性質がして先に言及しているんワットと(私たちが見たとダメージに貢献awの関数としてのdaが固定されており、式d(a、w)= a / 30.wwが変化した場合、dは引き続きwの増加関数であり、同じことが当てはまります。wを修正して変化させる場合)。

このw(a)は、武器のゲーム内の説明に表示される値を提供します。たとえば、ゲームで最高の武器を使用して「武器のダメージ:220」を取得します。

ゲームプレイ、したがってn(a)に完全に異なる仕様を使用することもできます。たとえば、ゲームの進行に伴って必要なヒット数が急速に増加し、その後プラトーになり、結果のソリューションが異なるものになります。


これは、数学の正しい理解とゲームプレイを出発点として組み合わせます。すばらしい答えです。
Marcks Thomas

1
@MarcksThomasありがとうございます!より多くの人々が彼らのニーズを明確に定義し、そこから彼らのゲームを構築したいと思います。そうすれば、完成度の高い完成度の高いゲームが表示されます。
jrsala

はい、これは完全な回答であることに同意します。私はこれを喜んで読みました:)
GrzegorzSławecki12年

1
素晴らしい!私はこの種の数学がシステム設計文献のより規則的な部分であることを望みます。(たぶん私はいつかダメージ対シールドに関するエッセイを書くべきでしょう...)
スティーブン・スタドニツキー

すばらしい答えですが、方程式で1文字の変数を使用する必要があるのはなぜですか?a「もう一度何を表していますか?」上にスクロールしますか?
Daniel Kaplan 2013

9

別の方向からゲームを設計することをお勧めします。まず、ゲームをどのようにプレイするか(数値ではなくゲームエクスペリエンスの観点から)を検討し、次に、数式と数値範囲の両方を設計して取得します。その結果。

ゲームプレイの目標は、敵を倒すために一定のヒット数を必要とすることです。ヒット数は3つの変数に依存します。

  • 敵のパワーレベル
  • キャラクターのパワーレベル
  • 武器のパワーレベル

まず、低、中、高の3つの変数(具体的な数値はまだないが、「低」、「中」、または「高」)のすべての可能な組み合わせと、ヒット数の表を作成する必要があります。これらの組み合わせには必須です。

次に、希望値に最も近い式と値の範囲を見つけてください。


7

最も簡単な方法は、武器のレベル間の武器のダメージを指数関数的に増加させることです。

ただし、重要なことは、敵が強くなっているときにHPがどのように成長するかを定義する必要があるということです。ですから、あなたの非常に強いとき、あなたはほんの数ヒットで簡単な敵を殺すべきですが、あなたのレベルの人は、最初にあなたのレベルにあった敵よりも殺すのが比較的難しいはずです。だから私はそれを以下のように見えるように設計します:

level   weapon  enemy   attack  total   hits needed
        dmg     hp      factor  dmg     to kill
======================================================
1       1       2       5       1.25    1.6
2       4       16      10      6       2.666666667
3       9       54      15      15.75   3.428571429
4       16      128     20      32      4
5       25      250     25      56.25   4.444444444
6       36      432     30      90      4.8
7       49      686     35      134.75  5.090909091
8       64      1024    40      192     5.333333333
9       81      1458    45      263.25  5.538461538
10      100     2000    50      350     5.714285714
11      121     2662    55      453.75  5.866666667
12      144     3456    60      576     6
13      169     4394    65      718.25  6.117647059
14      196     5488    70      882     6.222222222
15      225     6750    75      1068.75 6.315789474
16      256     8192    80      128     6.4
17      289     9826    85      1517.25 6.476190476
18      324     11664   90      1782    6.545454545
19      361     13718   95      2075.75 6.608695652
20      400     16000   100     2400    6.666666667
どこ:
1.合計dmgは、数式を使用して計算されます
2.武器dmg =レベル*レベル(指数関数的成長)
3.敵hp = 2 *レベル*レベル*レベル(指数関数的成長)
4.攻撃係数= 5 *レベル
5.必要なヒット数は、レベルxで、レベルxで武器を使用して、レベルxで敵を倒すために必要なヒット数を示します。

私は、許容できると思う結果を達成するためだけに、数式でこれらの定数係数を調整しました。重要なのは、線形成長が必要な場所と指数関数が必要な場所です。

また、例えば敵のLVL 20を倒すには、攻撃力が100で、LVL1武器を使用して合計6ダメージを取るには、かなりの時間がかかることに注意してください。あなたの意見が多すぎる場合は、定数で遊んでください。


「攻撃因子」とはどういう意味ですか?
Daniel Kaplan 2013

0

戦争工芸の世界は最高だと思います。プレイヤーの基本ステータスは総ダメージへの影響が低く、ほとんどのダメージ修正はギアのボーナスステータスからもたらされます。これにより、時間をかけてゲームを拡張し、バランスをとることがはるかに簡単になります

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