ロールプレイングの戦闘での
ダメージ計算の事で聞きたいんですが
なにかバランスの取れた計算方法はありますか??
みなさんはどのように計算してますか??
ダメージ計算
Re:ダメージ計算
>なにかバランスの取れた計算方法はありますか
具体的にどういうパラメータがある状態でのダメージ計算なのかわからないので、
[color=#d0d0ff" face="sans-serif] 攻撃者の攻撃力 - 攻撃対象の防御力[/color]
がダメージ値となります、としか言えません。
ゲーム毎にバトルで使用するパラメータ要素は千差万別なので、この手のものに万能な公式はありません。
従って、試行錯誤するしかないと思います。
>みなさんはどのように計算してますか??
私は作ったことがないので、あまり参考にならないかもしれませんが、
何らかの形で必要なパラメータを入力(ファイルからとか GUIを使ってとか)すれば、
バトルの経過と結果を一瞬で教えてくれるようなツール・・・バトルシミュレータを
作るのが一番いいのではないかと思います。
それがあれば、計算式の調整や、バトル環境(参加人数、敵のパラメータとか)の
変更してのテストとか主人公の成長の変化による調整なども一括してツール上で
調整・確認することができるので、作業は楽になるはずです。
ゲームの規模がある程度小さいので、そこまでしなくてもエクセルで計算式を書いて、
シミュレートしていくのもいいかと思います。
具体的にどういうパラメータがある状態でのダメージ計算なのかわからないので、
[color=#d0d0ff" face="sans-serif] 攻撃者の攻撃力 - 攻撃対象の防御力[/color]
がダメージ値となります、としか言えません。
ゲーム毎にバトルで使用するパラメータ要素は千差万別なので、この手のものに万能な公式はありません。
従って、試行錯誤するしかないと思います。
>みなさんはどのように計算してますか??
私は作ったことがないので、あまり参考にならないかもしれませんが、
何らかの形で必要なパラメータを入力(ファイルからとか GUIを使ってとか)すれば、
バトルの経過と結果を一瞬で教えてくれるようなツール・・・バトルシミュレータを
作るのが一番いいのではないかと思います。
それがあれば、計算式の調整や、バトル環境(参加人数、敵のパラメータとか)の
変更してのテストとか主人公の成長の変化による調整なども一括してツール上で
調整・確認することができるので、作業は楽になるはずです。
ゲームの規模がある程度小さいので、そこまでしなくてもエクセルで計算式を書いて、
シミュレートしていくのもいいかと思います。
Re:ダメージ計算
ダメージ計算の部分は凝りたいですよね。
凝りたいのに、いい計算方法がなくて、結構悩みました。
色々試行錯誤しているうちにこんな計算式にたどり着きました。
私独自のものなので、いいかどうかはわかりません。
ダメージ = レベル*2 + ((自分の攻撃力+武器の攻撃力) - (相手の防御力+相手の装備防御力)) * 自分の力*乱数1 + 自分の力*乱数2;
乱数は正規分布にしたがった乱数です。どこまで凝るかによりますが、正規分布を用いない一様乱数だと、バラバラの値になって、あまりよくありません。
この世で起きる全てのことは正規分布に分布します。
全ての起こる確率が一様だということはありません。
それはさいころを振る目の出る確率という事ではなく、
相手に殴りかかったとき、どれ位ダメージを与えるか。
現実的に言えば、パンチングマシーンを100回やったとき、出るスコアは平均に近い値が一番多く、
平均から離れるに従って少なくなるはずです。
きちんと統計を取れば正規分布になるはずです。
つまり、自然なダメージ値にするには正規分布を使った乱数が良いかと思います。
他トピ「RPGサンプルプログラム」というトピをあげておきますので、参考にしてください。
サンプルのzipファイルを回答すればプロジェクトファイルが
VisualStudio2005があれば開けます。slnファイルをお開きください。
ダメージ計算は
battle_graph_calc.cpp
の
damdec関数で決定しています。正規分布の乱数はrano関数で生成しています。
ダメージ = レベル*2 + ((自分の攻撃力+武器の攻撃力) - (相手の防御力+相手の装備防御力)) * 自分の力*乱数1 + 自分の力*乱数2;
より
return (int)(lv*2+(power+weapon-(def+equip))*strong*rano(0.01,0.05)+strong*rano(0.2,1.0));
で計算しています。rano関数の第一引数はちらばりを示すσ、第二引数は平均です。
計算式は
specifications.cpp
でも説明しています。
私の勝手な計算式なので、あてになりませんが、参考までに・・。
凝りたいのに、いい計算方法がなくて、結構悩みました。
色々試行錯誤しているうちにこんな計算式にたどり着きました。
私独自のものなので、いいかどうかはわかりません。
ダメージ = レベル*2 + ((自分の攻撃力+武器の攻撃力) - (相手の防御力+相手の装備防御力)) * 自分の力*乱数1 + 自分の力*乱数2;
乱数は正規分布にしたがった乱数です。どこまで凝るかによりますが、正規分布を用いない一様乱数だと、バラバラの値になって、あまりよくありません。
この世で起きる全てのことは正規分布に分布します。
全ての起こる確率が一様だということはありません。
それはさいころを振る目の出る確率という事ではなく、
相手に殴りかかったとき、どれ位ダメージを与えるか。
現実的に言えば、パンチングマシーンを100回やったとき、出るスコアは平均に近い値が一番多く、
平均から離れるに従って少なくなるはずです。
きちんと統計を取れば正規分布になるはずです。
つまり、自然なダメージ値にするには正規分布を使った乱数が良いかと思います。
他トピ「RPGサンプルプログラム」というトピをあげておきますので、参考にしてください。
サンプルのzipファイルを回答すればプロジェクトファイルが
VisualStudio2005があれば開けます。slnファイルをお開きください。
ダメージ計算は
battle_graph_calc.cpp
の
damdec関数で決定しています。正規分布の乱数はrano関数で生成しています。
ダメージ = レベル*2 + ((自分の攻撃力+武器の攻撃力) - (相手の防御力+相手の装備防御力)) * 自分の力*乱数1 + 自分の力*乱数2;
より
return (int)(lv*2+(power+weapon-(def+equip))*strong*rano(0.01,0.05)+strong*rano(0.2,1.0));
で計算しています。rano関数の第一引数はちらばりを示すσ、第二引数は平均です。
計算式は
specifications.cpp
でも説明しています。
私の勝手な計算式なので、あてになりませんが、参考までに・・。