ドラクエ8(PS2版) キャラの行動順序を確率計算
X(ツイッター)でまとめた件です
① まず、2キャラについての「序盤の表」を画像で掲載します。
② 2キャラについて、素早さ200までの検索用テキストファイルもあります。③ 経緯の説明として、当時のXの投稿を、下に貼っておきます。
④ さらに、「3キャラ」まで拡張した確率計算用のコード例(python)を掲載しています。ご自由にお使いください。
① 序盤の2キャラ
② 2キャラ、素早さ200まで
https://drive.google.com/file/d/1bcvU86t9VXi_TqS0UGwoSZNDW0FqbQdu/view
③ Xでの経緯
④ 3キャラにも使える計算用コード
# 3キャラの素早さを、並び順の「前から」入力
A = 5
B = 11
C = 5
### ここから下は触らない ##
import numpy as np
def suba(s):
""" キャラの素早さを受け取り、99通りのありうる数値を出力"""
l = np.array([int((s*R/32)) for R in range(32,65)])
return np.concatenate([l-1, l, l+1])
# キャラのラベルづけ、順序づけ、同値の回避
l_a = suba(A)*10 + 3
l_b = suba(B)*10 + 2
l_c = suba(C)*10 + 1
# カウンタの初期化
abc = 0
acb = 0
bac = 0
bca = 0
cab = 0
cba = 0
# 比較
for a in l_a:
for b in l_b:
for c in l_c:
flg = np.mod(max(a,b,c),10)*10 + np.mod(min(a,b,c),10)
if flg == 31: abc+=1
elif flg == 32: acb+=1
elif flg == 21: bac+=1
elif flg == 23: bca+=1
elif flg == 12: cab+=1
elif flg == 13: cba+=1
# めんどくなったので配列に格納
l_count = np.array([abc,acb,bac,bca,cab,cba])
# 率になおす
l_prob = l_count/99/99/99*100
# 表示
print("(A,B,C) = ", [A,B,C])
print("A → B → C : \t{:>8.4f}%".format(l_prob[0]))
print("A → C → B : \t{:>8.4f}%".format(l_prob[1]))
print("B → A → C : \t{:>8.4f}%".format(l_prob[2]))
print("B → C → A : \t{:>8.4f}%".format(l_prob[3]))
print("C → A → B : \t{:>8.4f}%".format(l_prob[4]))
print("C → B → A : \t{:>8.4f}%".format(l_prob[5]))
(A,B,C) = [5, 11, 5]
A → B → C : 0.3036%
A → C → B : 0.0003%
B → A → C : 57.6493%
B → C → A : 42.0164%
C → A → B : 0.0022%
C → B → A : 0.0281%
・筆者の実行環境では、10秒ほどで終わります。
・無料のwebサービスなどで実行するとタイムアウトするかもしれません。
・改良や拡張は、ご自由にどうぞ。
右弐 2024/4/17