どうもー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()
/
これを実行してみます!
実行結果
この青い部分が壁と認識して、白い部分は動くはずなんだけど動かない・・・
上下左右どこにも動かないんです(泣)
エラーは無く実行できてるから問題無いと思うんだけど・・・
本のソースコードと何度も照らし合わせたけど、間違いがわからない。
間違いがわかる方がいらっしゃれば、ぜひ教えて頂ければと思います。
ではアデュー。