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匹縛りでプレイ part1

どうもーASN48です。 小学…

1日 ago

世界樹の迷宮1 HD REMASTER part2

どうもーASN48です。 なん…

2か月 ago

世界樹の迷宮1 HD REMASTER part1

どうもーASN48です。 つい…

2年 ago

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

どうもーASN48です。 つい…

2年 ago

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

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

3年 ago