[血眼研究所]Pythonでサンドバッグを作ろう???③ GUI実装編
こんばんは!炎天下の中、研究室で寝落ちしてしまった血眼パイソンです笑
本日は、TkinterというGUI生成モジュールを使って、GUI上でサンドバッグ殴りを実現してみようと思います!
GUIとは...Graphical User Interfaceの略であり、簡単に言えばマウスやタッチパネルなどで操作できる画面のことを指します。
早速、作ってみたものを見ていただきましょう!
サンドバッグの画像は、いらすとやから引用しました🙏
こんな感じで、「Punch」と「Guard」の二種類のボタンからアクションを選ぶようになっています。上記は勝ちパターンです。
前回と比べて省いた文言もありますが、実装上の都合なのでお許しください🙇♂️
こちらは負けパターンです。
パンチをしてもサンドバッグが反撃してきて、ガードをしてもサンドバッグの攻撃のターンがあるという、バランスの取れたゲーム設定です。
以下、ソースコードです。
import random
import tkinter
def punch():
global button_next
cvs.delete("la")
Punch=random.randint(1,10)
Attack=random.randint(1,10)
cvs.create_text(100,240,text=soundlist[random.randint(0,2)],font=("Helvetica",16),tag="la")
sandbag["HP"]-=Punch
if sandbag["HP"]<=0:
cvs.delete("la")
cvs.create_text(320,240,text="ズザーッ",font=("Helvetica",16),tag="la")
cvs.create_text(500,50,text="サンドバッグのHP:0",font=("Helvetica",16),tag="la")
button_punch.place_forget()
button_guard.place_forget()
cvs.delete("pt")
player["HP"]-=Attack
if player["HP"]<=0:
cvs.delete("la")
cvs.create_text(100,50,text="プレ一ヤーのHP:0",font=("Helvetica",16),tag="la")
cvs.create_text(130,240,text="サンドバッグの前で倒れるなんて...",font=("Helvetica",16),tag="la")
button_punch.place_forget()
button_guard.place_forget()
if player["HP"]>0 and sandbag["HP"]>0:
cvs.create_text(100,50,text="プレ一ヤーのHP:"+str(player["HP"]),font=("Helvetica",16),tag="la")
cvs.create_text(500,50,text="サンドバッグのHP:"+str(sandbag["HP"]),font=("Helvetica",16),tag="la")
def guard():
cvs.delete("la")
cvs.create_text(100,240,text="サンドバッグの攻撃",font=("Helvetica",16),tag="la")
Guard=random.randint(1,10)
Attack=random.randint(1,10)
damage_p=int(10/Guard)
damage_s=int(10/Attack)
cvs.create_text(500,240,text=wordlist[random.randint(0,2)],font=("Helvetica",16),tag="la")
player["HP"]-=damage_p
sandbag["HP"]-=damage_s
if player["HP"]<=0:
cvs.delete("la")
cvs.create_text(100,50,text="プレ一ヤーのHP:0",font=("Helvetica",16),tag="la")
cvs.create_text(130,240,text="サンドバッグの前で倒れるなんて...",font=("Helvetica",16),tag="la")
button_punch.place_forget()
button_guard.place_forget()
if sandbag["HP"]<=0:
cvs.delete("la")
cvs.create_text(320,240,text="ズザーッ",font=("Helvetica",16),tag="la")
cvs.create_text(500,50,text="サンドバッグのHP:0",font=("Helvetica",16),tag="la")
button_punch.place_forget()
button_guard.place_forget()
cvs.delete("pt")
if player["HP"]>0 and sandbag["HP"]>0:
cvs.create_text(100,50,text="プレ一ヤーのHP:"+str(player["HP"]),font=("Helvetica",16),tag="la")
cvs.create_text(500,50,text="サンドバッグのHP:"+str(sandbag["HP"]),font=("Helvetica",16),tag="la")
if __name__ == "__main__":
img=[]
soundlist=["バシッ","バンッ","ドンッ"]
wordlist=["なんで攻撃してくるん?","痛えよ、おい","漫画じゃないんだからぁ"]
player={"HP":100}
sandbag={"HP":100}
win=tkinter.Tk()
win.geometry("640x480")
cvs=tkinter.Canvas(win,width=640,height=480)
cvs.pack()
cvs.create_rectangle(0,0,640,480,fill="white")
img.append(tkinter.PhotoImage(file="Sandbag.png",master=win))
cvs.create_image(320,240,image=img[0],tag="pt")
button_punch=tkinter.Button(win,text=u"Punch",command=punch,width=15)
button_punch.place(x=40,y=360)
button_guard=tkinter.Button(win,text=u"Guard",command=guard,width=15)
button_guard.place(x=420,y=360)
win.mainloop()
100行近くなってきました!(後々、コード解説も載せる予定です!)
いかがだったでしょうか。実際にイラストがあると、見やすいしサンドバッグを相手にしている実感が湧きますよね笑
次回は、効果音やパンチした時のアクションを追加しようと思います!
いよいよ、ゲームらしさが出てきましたが、優しい目で見守ってくださいw
それではまた明日!
この記事が気に入ったらサポートをしてみませんか?