Q&A
実現したいこと
キャラクター(ここでは赤い丸)を動かしたときに各操作ごとに"ok"と出力したいです
前提
迷路ゲームを作っています。以下のコードを実行し赤い丸を迷路上で動かしたとき、毎回の移動ごとに関数checkを実行して"ok"と出力したいのですが、最初の一度しか実行されません。どこに問題があって思った通りの実行結果が得られないのでしょうか。ご教示お願い致します。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
PYTHON
1ソースコード 2from dataclasses import dataclass, field 3from typing import * 4from tkinter import* 5 6# 定数の設定 7CANVAS_WIDTH = 320 # 画面横サイズ 8CANVAS_HEIGHT = 320 # 画面縦サイズ 9BLOCK_SIZE = 40 # 1ブロックのサイズ 10 11# マップ 12# 0 1 2 3 4 5 6 7 # 13MAP = [[1,0,0,0,0,0,0,0], 14 [1,0,0,1,1,1,1,0], 15 [1,1,1,1,0,0,1,0], 16 [0,0,0,0,1,1,1,0], 17 [0,0,0,0,1,0,0,0], 18 [0,0,0,0,1,1,1,0], 19 [0,0,0,0,0,0,1,1], 20 [0,0,0,0,0,0,0,2]] 21 22@dataclass 23class Maze: 24 map: List = field(default_factory=lambda: MAP) 25 size: int = BLOCK_SIZE 26 27 def createMaze(self): 28 x, y = 0, 0 29 for row in self.map: 30 for ele in row: 31 if ele == 0: # 壁を描画 32 canvas.create_rectangle( 33 x*self.size, y*self.size, x*self.size+self.size, y*self.size+self.size, 34 fill="#484848", outline="#484848" 35 ) 36 elif ele == 1: # 通路を描画 37 canvas.create_rectangle( 38 x*self.size, y*self.size, x*self.size+self.size, y*self.size+self.size, 39 fill="#E0E0E0", outline="#E0E0E0" 40 ) 41 elif ele == 2: # ゴールの描画 42 canvas.create_rectangle( 43 x*self.size, y*self.size, x*self.size+self.size, y*self.size+self.size, 44 fill="#48B060", outline="#48B060" 45 ) 46 x += 1 47 else: 48 x = 0 49 y += 1 50 51@dataclass 52class Character: 53 id: int = 0 54 x_pos: int = 0 55 y_pos: int = 0 56 size: int = BLOCK_SIZE #とりあえず赤い円を移動させる 57 58 def move(self, event): 59 # キー名取得 60 key_name = event.keysym 61 62 # 移動可否確認 63 if key_name == "Left": 64 if self.x_pos > 0 and MAP[self.y_pos][self.x_pos-1] != 0: 65 self.x_pos -= 1 66 elif key_name == "Right": 67 if self.x_pos < len(MAP[self.y_pos])-1 and MAP[self.y_pos][self.x_pos+1] != 0: 68 self.x_pos += 1 69 elif key_name == "Up": 70 if self.y_pos >0 and MAP[self.y_pos-1][self.x_pos] != 0: 71 self.y_pos -= 1 72 elif key_name == "Down": 73 if self.y_pos < len(MAP)-1 and MAP[self.y_pos+1][self.x_pos] != 0: 74 self.y_pos += 1 75 # 円表示 76 canvas.coords( 77 self.id, self.x_pos*self.size, self.y_pos*self.size, 78 self.x_pos*self.size+self.size, self.y_pos*self.size+self.size 79 ) 80 81@dataclass 82class Game: 83 84 def makeCharacter(self, x, y, size): 85 id = canvas.create_oval( 86 x, y, x+size, y+size,outline="red", fill="red" 87 ) 88 return Character(id, x, y, size) 89 90 def check(self): 91 print("ok") 92 93maze = Maze() 94game = Game() 95 96# キャンバスの設定 97tk = Tk() 98canvas = Canvas(tk, width=CANVAS_WIDTH, height=CANVAS_HEIGHT) 99canvas.pack() 100 101# 迷路とキャラクターの作成 102maze.createMaze() 103character = game.makeCharacter(0, 0, BLOCK_SIZE) 104 105canvas.bind("<KeyPress>", character.move) 106canvas.bind("<KeyPress>", game.check()) 107canvas.focus_set() 108 109tk.mainloop() 110 111### 試したこと 112 113ここに問題に対して試したことを記載してください。 114 115### 補足情報(FW/ツールのバージョンなど) 116 117ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/02/18 14:14