[Python]迷路プログラム用の新たなエディタを作ってみた
前に作ったプログラムの迷路プログラムの床パターンを作る新たなエディタを作ってみました。Excelで作り、Pythonに貼り付けるということをできるようにしました。
前回の迷路
tamakon3.hatenablog.com
メリット
- Excelで作るため""を削除する手間がありますが、視覚的に作れるので見やすい
- 貼り付けるのがそこそこ簡単にできる
- 色んなパターンが作れる
プログラム
import tkinter import tkinter.messagebox key = "" def key_down(e): #キーが押された時に行う処理 global key key = e.keysym #keysymには押されたキーの情報が入る def key_up(e): #キーが離された時に行う処理 global key key = "" #キーが離された時、キーの情報を空にする mx = 1 my = 1 yuka = 0 yukanokazu = 0 def main_proc(): global mx,my,yuka,yukanokazu if key == "Shift_L"and yuka >1: #左シフトキーを押し、2マス以上塗っていたら canvas.delete("PAINT") #塗ったところを消す mx = 1 #キャラクターを初期位置に戻す my = 1 yuka = 0 for y in range(7): for x in range(10): if maze[y][x] == 2: maze[y][x] = 0 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 if maze[my][mx] == 0: #移動したところが通路なら maze[my][mx] = 2 #リストの値を2にする yuka = yuka+1 canvas.create_rectangle(mx*80,my*80,mx*80+79,my*80+79,fill="pink",width=0,tag="PAINT") #そこをピンクで塗る canvas.delete("MYCHR") #一旦消す canvas.create_image(mx*80+40,my*80+40,image = img,tag = "MYCHR")#再度キャラクターの画像を表示 if yuka == yukanokazu: canvas.update() tkinter.messagebox.showinfo("おめでとう!","全ての床を塗りました!") else: root.after(100,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。Excelからのコピペをここの下に貼り付ける [1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,1,0,0,0,1], [1,1,1,1,0,1,0,0,0,1], [1,1,1,1,0,1,1,0,0,1], [1,0,0,0,0,1,1,0,0,1], [1,0,0,0,0,0,0,0,0,1], [1,1,1,1,1,1,1,1,1,1] ] kabenokazu = 0 for y in range(7): #yは0-6まで繰り返す for x in range(10): if maze[y][x] == 1:#maze[y][x]が1,つまり壁なら灰色の四角を表示させる kabenokazu = kabenokazu+1 canvas.create_rectangle(x*80,y*80,x*80+80,y*80+80,fill = "skyblue",width = 0) # yukanokazu = 70-kabenokazu #Nmasuに70-yukanokazuを代入 img = tkinter.PhotoImage(file = "kk_100.png") canvas.create_image(mx*80+40,my*80+40,image = img,tag = "MYCHR") main_proc() root.mainloop()
Point
例)=CHAR(9)&"["&A1&","&B1&","&C1&","&D1&","&E1&","&F1&","&G1&","&H1&","&I1&","&J1&"],"
- 各行の文字列を全部結合した。
例)=L1&CHAR(13)&L2&CHAR(13)&L3&CHAR(13)&L4&CHAR(13)&L5&CHAR(13)&L6&CHAR(13)&L7&CHAR(13)
- ゴールの条件がマス目に合うようにしたので、どんな形でも対応できる。(従来30固定)
ダウンロード
こちらから、ファイル一式ダウンロードできます。Macで作ったので、文字化けしたらごめんなさい。
drive.google.com