#1【Python】Tkinterでクソゲーを作ってみる(1)

《目次》

《内容》

初投稿です.見づらい点あるとは思いますがご了承ください.
また,プログラミングも勉強中の身であります.
今回はPythonGUI作成ツールである「Tkinter」使用し,ゲーム的なものを作っていきたいと思います.
機能は少しずつ追加していきたいです.
↓読み取るCSVファイルの内容↓
1,1,1,1,1,1,1,1,1,1
1,0,0,2,0,0,0,0,0,1
1,1,0,1,0,1,1,1,0,1
1,2,0,1,0,1,0,0,0,1
1,0,1,1,0,0,0,0,1,1
1,0,0,0,0,0,1,0,1,1
1,0,1,1,0,0,1,0,1,1
1,2,1,0,0,1,1,1,1,1
1,0,0,0,0,0,0,0,0,1
1,1,1,1,1,1,1,1,1,1

《プログラム》
import tkinter as tk
import time as tm
import pandas as pd
df = pd.read_csv("meiro.csv",header=None).values.tolist()
xl=8
yl=8
rt1 =tk.Tk()
rt1.geometry("190x210")
rt1.title("クソゲー")
rt1.resizable(0,0)
def forward(event): #Wキーが押されると前へ
    global xl
    xl-=1
    lbl1.grid(row=xl,column=yl)
def back(event): #Xキーが押されると後へ
    global xl
    xl+=1
    lbl1.grid(row=xl,column=yl)
def right(event): #Dキーが押されると右へ
    global yl
    yl+=1
    lbl1.grid(row=xl,column=yl)
def left(event): #Aキーが押されると左へ
    global yl
    yl-=1
    lbl1.grid(row=xl,column=yl)
def gun(event): #Sキーが押されると銃弾的なものを発射
    lbl2 = tk.Label(rt1,text="●")
    global yl
    global xl
    yb = yl
    xb = xl
    for i in range(5):
        tm.sleep(0.05)
        xb -=1
        lbl2.grid(row=xb,column=yb)
        lbl2.update()
        lbl2.grid_forget()
n = len(df)
for i in range(n):
    for j in range(n):
        if df[i][j] == 1: #CSV1なら■
            lbl = tk.Label(rt1,text="■")
            lbl.grid(row = i,column = j)
        if df[i][j] == 0: #CSV0なら空白
            lbl = tk.Label(rt1,text="  ")
            lbl.grid(row = i,column = j)
        if df[i][j] == 2: #CSV2なら★
            lbl = tk.Label(rt1,text="★")
            lbl.grid(row = i,column = j)
lbl1 = tk.Label(rt1,text="☻") #動かすキャラクター
lbl1.grid(row=xl,column=yl)
rt1.bind("<Key-w>",forward)
rt1.bind("<Key-x>",back)
rt1.bind("<Key-d>",right)
rt1.bind("<Key-a>",left)
rt1.bind("<Key-s>",gun)
rt1.mainloop()
《プチ解説》
  • df = pd.read_csv("filename.csv",header=None).values.tolist()

このように記載することで,csvファイルを自動で配列に格納してくれる.
header=Noneを入れないと,最初の行を読み込みません.

  • root.bind("",function)

このように記載することで,キーバインドが可能となる.

  • root.resizable(0,0)

このように記載することでウィンドウサイズを固定できる.

《今後の課題》
  • 「■」は壁なので進めないようにする.
  • 「★」にぶつかったら,何かしらの処理が発生するようにする.
  • 最終的にはRPGのようなものを作る予定です.

実行画面は以下のようになります.
まだまだですね~.

f:id:tqdm8192:20190916013040p:plain
実行画面

今回は以上になります.
詳細に解説するほど知識はないので,あまりしません.
今後の成長具合を楽しみにしていただければ幸いです.