FC版ドラクエ1のレベル18にしてはりゅうおうに勝率50%とやけに高いなぁと思っていましたが、原因がわかりました。
これが問題のコードです
HPが48以下のときにベホイミをかけるループですね
if myMP >= 10:
#MPが10以上ならベホイミをかけられるのでかけます
behoimi = random.randint(85,100)
print ("ゆうしゃ は ベホイミのじゅもんを となえた!")
myHP += behoimi
myMP -= syouhiMP
if myHP >115:
myHP =115
#上から順に
#ベホイミ回復量85-100を 変数behoimi に代入
#文章
#自分のHPに behoimiを足す
#自分のMPをshouhiMP (10)を減らす
#HPが最大HPの115より大きくなってしまった場合、115に戻す
さて、ここから次の文章へのつなぎ部分が問題でした
if myMP >= 10:
behoimi = random.randint(85,100)
print ("ゆうしゃ は ベホイミのじゅもんを となえた!")
myHP += behoimi
myMP -= syouhiMP
if myHP >115:
myHP =115
else:
damage = random.randint(6,12)
print (" りゅうおうに " + str(damage) + " のダメージ")
HP -= damage
悪さをしていたのはこの else以降の文章のインデントでした
このelse文は直前のHP部分の条件にかかっています。
したがって、ベホイミをかけてHPが最大HP(115)に届かなかった場合、さらにりゅうおうに追加攻撃できる状態でした。
それは強いですね、チートですね。
さて、書き直しますと
見た目ほとんど変わりませんが、結果は大きく違います
さらに計算を早く回すために無駄な文章は結局削除し、勝率だけを求めるコードに書き換えました。
戦闘回数は10万回! 勝率は・・・・!?
勝率:32.6%
だいぶ減りましたね、実際この条件ではこのぐらいだと思います。
実際のプレイではさらに
- 後手を引く
- 第一形態でHPを削られている
- MPを消費してしまっている
などが原因でもうちょっと下がります
ちなみに第一形態でHPが90になった状態で第二形態と戦う場合、
勝率16.1%になります。
HP85の場合は13.8%でした。
プログラムでは10万回の戦闘を5秒ぐらいで終わらせますが、実機でやったら1戦に数十分かかるので、精神的にこの確率よりも低くなると思います。
(5秒で10万回戦ってくれるりゅうおうさん)
(5秒で10万回戦ってくれるりゅうおうさん)
0 件のコメント:
コメントを投稿