注目キーワード
  1. ゲーム
  2. python
  3. MyLIFE
  4. 音楽

Python学習(ゲーム編)方向キーでキャラを動かす・・・動かない(泣)

どうもーASN48です。

かなーり久しぶりになってしまったPython学習ブログですが(笑)

少しずつは進めてたんだよ!

ということで!

Pythonでつくるゲーム開発入門講座!

この本に沿って勉強しておりました!!

順調に楽しく進めておりましたが!

問題が発生しました・・・

成功例

まずは下記のプログラムをご覧ください。

/* Your code... *
import tkinter

key = ""
def key_down(e):
    global key
    key = e.keysym
def key_up(e):
    global key
    key = ""

cx = 400
cy = 300
def main_proc():
    global cx, cy
    if key == "Up":
        cy = cy - 20
    if key == "Down":
        cy = cy + 20
    if key == "Left":
        cx = cx - 20
    if key == "Right":
        cx = cx + 20
    canvas.coords("MYCHR", cx, cy)
    root.after(100, main_proc)

root = tkinter.Tk()
root.title("キャラクターの移動")
root.bind("", key_down)
root.bind("", key_up)
canvas = tkinter.Canvas(width=800, height=600,bg="lightgreen")
canvas.pack()
img = tkinter.PhotoImage(file="mimi.png")
canvas.create_image(cx, cy, image=img, tag="MYCHR")
main_proc()
root.mainloop()

このプログラムを実行すると「mimi.png」の画像が方向キーで動きます。

プログラムの実行結果

方向キーによる移動1

方向キーによる移動2

こんな感じで自由に動かせます!

ここまでは順調です!


「スポンサーリンク」

 

問題点

さっきのプログラムの応用として、キャラクターが迷路を移動するプログラムです。

壁と認識される部分には移動できず、通路のみ移動できるのが正解です。

ではプログラムです。

/* Your code... *
import tkinter

key = ""
def key_down(e):
    global Key
    key = e.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:
        my = my - 1
    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)
    root.after(300, main_proc)

root = tkinter.Tk()
root.title("迷路内を移動する")
root.bind("", key_down)
root.bind("", key_up)
canvas = tkinter.Canvas(width=800, height=560, bg="white")
canvas.pack()

maze = [
    [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):
    for x in range(10):
        if maze[y][x] == 1:
            canvas.create_rectangle(x*80, y*80, x*80+79, y*80+79, fill="skyblue", width=0)

img = tkinter.PhotoImage(file="mimi_s.png")
canvas.create_image(mx*80+40, my*80+40, image=img, tag="MYCHR")
main_proc()
root.mainloop()
/

これを実行してみます!

実行結果

この青い部分が壁と認識して、白い部分は動くはずなんだけど動かない・・・

上下左右どこにも動かないんです(泣)

エラーは無く実行できてるから問題無いと思うんだけど・・・

本のソースコードと何度も照らし合わせたけど、間違いがわからない。

間違いがわかる方がいらっしゃれば、ぜひ教えて頂ければと思います。

ではアデュー。

最新情報をチェックしよう!