前回は勇者の初期HPを変えたときの勝率を求めました。
今回は前回に引き続き、初期HPが1のときから最大値の115までの条件を一気に計算するようにコードを書き換えました。
修正点をメモ書きで書いております
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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 #グラフ表示 |
1条件につき10万回繰り返し、115条件の計算をしました
1150万回の計算です。さすがにそろそろ計算速度も考えてプログラミングしないと計算時間がかかるようになってきました。
基本的にfor,if文は短縮余地があるので今後改良予定です
計算結果は以下のグラフの通りです
前回は"単純なグラフにはならない"ことを示しましたが、
今回はHP48を下回ると一気に勝率が下がることを示しました。
RTAをやってるときに第2形態戦闘開始時にHP48以下だったら絶望しかないですね(たぶん実際はあまりないと思いますが)
<<< FC版ドラクエ1 りゅうおうとの戦いシミュレーション【Python】 その3
0 件のコメント:
コメントを投稿