Categories: Python

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()
/

これを実行してみます!

実行結果

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

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

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

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

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

ではアデュー。

asn48

福島県在住。1989年(平成元年)生まれの男です。 色々なことに興味を持って多趣味ですが、飽きやすく冷めやすい性格。 ブログについては、ゆるーく好きな時に好きなことを書いていきたいと思い始めてみました。よろしくお願い致します。

Recent Posts

世界樹の迷宮1 HD REMASTER part1

どうもーASN48です。 つい…

1年 ago

ついにゲーミングPC買ったぜ!!!

どうもーASN48です。 つい…

1年 ago

世界樹の迷宮X 三人旅 社畜が世界樹へ挑む 一覧

この三人パーティで難易度ヒロイ…

2年 ago