見出し画像

[血眼研究所]Pythonでサンドバッグを作ろう???③ GUI実装編

こんばんは!炎天下の中、研究室で寝落ちしてしまった血眼パイソンです笑
本日は、TkinterというGUI生成モジュールを使って、GUI上でサンドバッグ殴りを実現してみようと思います!

GUIとは...Graphical User Interfaceの略であり、簡単に言えばマウスやタッチパネルなどで操作できる画面のことを指します。
早速、作ってみたものを見ていただきましょう!

画像1

サンドバッグの画像は、いらすとやから引用しました🙏
こんな感じで、「Punch」と「Guard」の二種類のボタンからアクションを選ぶようになっています。上記は勝ちパターンです。
前回と比べて省いた文言もありますが、実装上の都合なのでお許しください🙇‍♂️

画像2

こちらは負けパターンです。
パンチをしてもサンドバッグが反撃してきて、ガードをしてもサンドバッグの攻撃のターンがあるという、バランスの取れたゲーム設定です。

以下、ソースコードです。

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
それではまた明日!


この記事が気に入ったらサポートをしてみませんか?