たまこんブログ

学生×プログラミング→2020年3月ブログ開設!趣味の一環でPythonでつくったゲーム や自分が読んで役に立った 本、知識などを紹介しています!

迷路完成

前回の続きで迷路を完成させました。

学んだこと

・二重ループのforの使い方
・数値で壁と床を表す方法
・条件分岐の使い方

目次

  • プログラム実行結果
  • プログラム解説(一部のみ抜粋)

実行結果

f:id:tamakon3:20200411192618g:plain

プログラム解説

def key_down(e):    #キーが押された時に行う処理
    global key
    key=e.keysym    #keysymには押されたキーの情報が入る
def key_up(e):      #キーが離された時に行う処理
    global key
    key=""          #キーが離された時、キーの情報を空にする

mx=1
my=1

def main_proc():
    global mx,my
    
    if key == "Up"and maze[my-1][mx]==0:    #upのキーが押されたら
        my=my-1                             #キャラクターのy座標を-20
    if key == "Down"and maze[my+1][mx]==0:
        my=my+1
    if key == "Left"and maze[my][mx-1]==0:
        mx=mx-1
    if key == "Right"and maze[my][mx+1]==0:
        mx=mx+1
    canvas.coords("MYCHR",mx*80+40,my*80+40)    #計算したxとy座標にキャラを表示
    root.after(300,main_proc)

root=tkinter.Tk()
root.title("動きます")
root.bind("<KeyPress>",key_down)    #keyが押された時に行う処理を指定。
root.bind("<KeyRelease>",key_up)    #keyが離された時に行う処理を指定。
canvas=tkinter.Canvas(width=800,height=560,bg="white")
canvas .pack()


maze=[                      #床と壁を数値に置き換える。床を0、壁を1
    [1,1,1,1,1,1,1,1,1,1],
    [1,0,0,0,0,0,1,0,0,1],
    [1,0,1,1,0,0,1,0,0,1],
    [1,0,0,1,0,0,0,0,0,1],
    [1,0,0,1,1,1,1,1,0,1],
    [1,0,0,0,0,0,0,0,0,1],
    [1,1,1,1,1,1,1,1,1,1]
    ]
for y in range(7):  #yは0-6まで繰り返す
    for x in range(10): 
        if maze[y][x] ==1:  #maxe[y][x]が1,つまり壁なら灰色の四角を表示させる
            canvas.create_rectangle(x*80,y*80,x*80+79,y*80+79,fill="skyblue",width=0)

感想

今までのプログラムを合体させ迷路プログラムを完成させました
条件分岐、二重のforなど難しいことだらけですがこれからも頑張ります!!