2017年3月21日火曜日

FC版ドラクエ1 りゅうおうとの戦いシミュレーション【Python】 その4 ~ゆうしゃの初期HPと勝率の関係~

FC版ドラクエ1、りゅうおう第二形態との戦いをシミュレーションしています。

前回は勇者の初期HPを変えたときの勝率を求めました。

今回は前回に引き続き、初期HPが1のときから最大値の115までの条件を一気に計算するようにコードを書き換えました。

修正点をメモ書きで書いております

# -*- coding: utf-8 -*-
"""
基礎データ
ゆうしゃ
HP115
MP100
こうげきとベホイミのみ
こうげき 6~12のランダム
ベホイミ 85~100のランダム
りゅうおう
HP130
こうげき 24~48
ほのお 42~48
確率半分とする
ルーチーン
HP49以上ならこうげき
HP48以下になったらMPが尽きるまでベホイミで回復
"""
import random
import matplotlib.pyplot as plt #グラフを描くためにmatplotlibをインポート
katilist=[] #勝率を格納するための空のリストを作成、負け率はいらないので消しました
joukenlist=[] #グラフの横軸になる値を格納する空のリストを作成
step = 100000
for z in range(1,115):
kati = 0
for i in range(step):
myHP = z
myMP = 100
HP = 130
syouhiMP = 10
try:
while HP > 0:
if myHP >48:
damage = random.randint(6,12)
HP -= damage
if HP <= 0:
kati +=1
raise Exception
elif myHP >0:
if myMP >= 10:
behoimi = random.randint(85,100)
myHP += behoimi
myMP -= syouhiMP
if myHP >115:
myHP =115
else:
damage = random.randint(6,12)
HP -= damage
if HP <= 0:
kati +=1
raise Exception
ryucommand = random.randint(0,1)
if ryucommand == 0:
mydamage = random.randint(24,48)
myHP -= mydamage
elif ryucommand == 1:
mydamage = random.randint(42,48)
myHP -= mydamage
if myHP < 0:
raise Exception
except Exception:
pass
katilist.append(kati/step*100) #勝率をリストに入れていく
joukenlist.append(z) #横軸の値をリストに入れていく
plt.plot(joukenlist,katilist,'o') #↑で得られたリストをグラフ化
plt.show #グラフ表示
view raw 03211 hosted with ❤ by GitHub




1条件につき10万回繰り返し、115条件の計算をしました
1150万回の計算です。さすがにそろそろ計算速度も考えてプログラミングしないと計算時間がかかるようになってきました。

基本的にfor,if文は短縮余地があるので今後改良予定です

計算結果は以下のグラフの通りです



前回は"単純なグラフにはならない"ことを示しましたが、

今回はHP48を下回ると一気に勝率が下がることを示しました。

RTAをやってるときに第2形態戦闘開始時にHP48以下だったら絶望しかないですね(たぶん実際はあまりないと思いますが)



<<<   FC版ドラクエ1 りゅうおうとの戦いシミュレーション【Python】 その3


0 件のコメント:

コメントを投稿