どこが間違えてるのかが分からない
解決したいこと
Pythonでコーディングしてみました。ただ色んな問題が発生してしまい、チャッピーなどに聞いてもあまり宛にならない答えだったので、お手上げ状態です。よろしければ、色々教えていただきたいです。
発生している問題・エラー
・敵を倒してから次の敵が現れるまで「i歩目」の出力が出ない
・2戦目以降の敵の体力が恐らく0のまま引き継いでいる
・空白入れた時に前のコマンドに戻りたいが方法が分からない
import datetime
import random
i=1
date=datetime.date.today()
Ene_exp=6
#プレイヤーの名前を入力
print("あなたの名前は?")
player=input()
#ゲームの入り。挨拶
print(f"{player}さんようこそ。今日は{date}です!今日も一日頑張りましょう!")
#ゲームの開始。60歩でゴールするドラクエ風のゲーム。敵はスライムのみ
while i<=60:
#最初から持ってる道具の確認
items={"薬草":1,"毒消し草":1,"キメラのつばさ":0}
#プレイヤー、敵のステータスの確認
exp=0
lv=1
Player_HP=9+lv*2
Player_Attack=3
Enemy_Attack=2
Enemy_MaxHP=10
#プレイヤーが何歩進んだか記入
print(f"{i}歩目")
#敵に遭遇、宝箱を発見する確率
walk1=random.randint(1,10)
if walk1>7:
#敵に遭遇する確率(ここいじればまたなんか変えられるかも?)
walk2=random.randint(1,15)
if walk2>=11:
#敵に遭遇、バトルに入る
print("スライムが現れた!")
Enemy_HP=Enemy_MaxHP
#プレイヤーか敵の体力が0になるとバトル終了
while (Enemy_HP>0) or (Player_HP>0):
#コマンド表示
print("1:戦う")
print("2:持ち物")
print("3:様子を見る")
print("4:逃げる")
#コマンド入力
com=input("どうする?:")
#1を入力したとき
if com=="1":
P_damage=random.randint(Player_Attack, Player_Attack+3)
E_damage=random.randint(Enemy_Attack,Enemy_Attack+2)
#クリティカルヒット
if P_damage==Player_Attack+3:
crt_p=random.random()
if crt_p>0.7:
print(f"クリティカルヒット!!スライムに{str(round(P_damage*1.3))}のダメージを与えた!")
#通常の攻撃
else:
print(f"{player}はスライムに {str(P_damage)} のダメージを与えた!")
else:
print(f"{player}はスライムに {str(P_damage)} のダメージを与えた!")
#2を入力したとき
elif com=="2":
#持ち物を消費したとき自分のターンを終了する
before=items
while items==before:
#持ち物表示
for item, count in items.items():
if count>0:
print(f"{item}:{count}")
#持ち物入力(さっきとは違って盆号ではなく持ち物入力)
UseItem=input("何を使う?:")
#薬草で体力を回復(最大10回復)
if UseItem=="薬草":
#10回復できるとき
if Player_HP+10<=9+lv*2:
item["薬草"]-=1
print(f"{player}は10回復した!")
Player_HP+=10
#1~9回復できるとき
elif Player_HP+10>9+lv*2 and Player_HP<9+lv*2:
item["薬草"]-=1
print(f"{player}は{str(9+lv*2-Player_HP)}回復した!")
Player_HP=9+lv*2
#満タンで回復できない時
elif Player_HP==9+lv*2:
print(f"{player}は薬草を使おうとした。しかし体力が満タンだ!")
#他のアイテムを使うとき(今回は毒要素、逃げ要素は全部省く)
elif (UseItem=="毒消し草")or (UseItem=="キメラのつばさ"):
print(f"{player}は{UseItem}を使おうとした。")
print("しかし効果がなかった!")
#コマンドが空白の時
elif UseItem=="":
#最初のコマンド入力のとこに戻る
continue
#最初のコマンドで3を入力したとき
elif com=="3":
#様子見るだけの無駄コマンド
print("スライムはこちらの様子をうかがっている")
#4を入力したとき
elif com=="4":
#今回は100%逃げられるようにしている
print("すきを狙って逃げた!")
break
#攻撃で体力減らす
Enemy_HP-=P_damage
#敵が倒れた時
if Enemy_HP<=0:
print("スライムは倒れた!")
#経験値取得
exp+=Ene_exp
print(f"{player}は{str(Ene_exp)}の経験値を得た!")
#レベルアップ
if exp>lv*2+13:
exp-=lv*2+13
lv+=1
Player_HP+=5
Player_Attack+=2
print(f"{player}はレベルアップした!")
print("体力が5アップした!攻撃力が2アップした!")
#レベルアップしない
else:
pass
#敵が倒れてない&敵の攻撃
else:
print(f"スライムの攻撃!{player}に{str(E_damage)}のダメージ!")
Player_HP-=E_damage
#プレイヤー死亡(ゲーム終了)
if Player_HP<=0:
print(f"{player}は死んだ!")
print("<h1><b>GAME OVER</b></h1>")
else:
pass
#宝箱を発見する
elif walk1==7:
#宝箱の内容(ランダム)
p=random.randint(1,3)
reward=["薬草","毒消し草","キメラのつばさ"]
if p==1:
reward="薬草"
items["薬草"]+=1
elif p==2:
reward="毒消し草"
items["毒消し草"]+=1
elif p==3:
reward="キメラのつばさ"
items["キメラのつばさ"]+=1
print(f"{player}は宝箱を見つけた!",end="")
print(f"宝箱から{reward}を手に入れた!")
i+=1
#ゲーム終了(HTMLで表示したい)
print("<h1><b>GOAL!</b></h1>")