前提
pythonのtkinterモジュールの勉強で簡単なゲームを作っています。
その際に、マウスの左クリックをしたらゲームがスタートする機能を追加しようとコードを書いたのですが、それが反映されません。
また、動いているのですが、エラーが表示されています。
実現したいこと
ゲームをスタートをする機能を追加したいです。
エラーをなくしたい。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\ishii\OneDrive\デスクトップ\python\pythonではじめよう\第13章.py", line 73, in <module> ball.draw() File "C:\Users\ishii\OneDrive\デスクトップ\python\pythonではじめよう\第13章.py", line 24, in draw self.canvas.move(self.id,self.x,self.y) File "C:\Users\ishii\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 2585, in move self.tk.call((self._w, 'move') + args) _tkinter.TclError: invalid command name ".!canvas"
該当のソースコード
python
1from tkinter import* 2import random 3import time 4class Ball: 5 def __init__(self,canvas,paddle,color): 6 self.canvas = canvas 7 self.paddle = paddle 8 self.id = canvas.create_oval(10,10,25,25,fill=color) 9 self.canvas.move(self.id,245,100) 10 starts = [-3,-2,-1,1,2,3] 11 random.shuffle(starts) 12 self.x=starts[0] 13 self.y=-3 14 self.canvas_height=self.canvas.winfo_height() 15 self.canvas_width=self.canvas.winfo_width() 16 self.hit_bottom = False 17 def hit_paddle(self,pos): 18 paddle_pos = self.canvas.coords(self.paddle.id) 19 if pos[2]>=paddle_pos[0] and pos[0]<=paddle_pos[2]: 20 if pos[3]>=paddle_pos[1] and pos[3]<=paddle_pos[3]: 21 return True 22 return False 23 def draw(self): 24 self.canvas.move(self.id,self.x,self.y) 25 pos = self.canvas.coords(self.id) 26 if pos[1]<=0: 27 self.y=3 28 if pos[3]>=self.canvas_height: 29 self.hit_bottom = True 30 if self.hit_paddle(pos) == True: 31 self.y =-3 32 if pos[0]<=0: 33 self.x = 3 34 if pos[2]>= self.canvas_width: 35 self.x =-3 36class Paddle: 37 def __init__(self,canvas,color): 38 self.canvas = canvas 39 self.id = canvas.create_rectangle(0,0,100,10,fill=color) 40 self.canvas.move(self.id,200,300) 41 self.x = 0 42 self.canvas_width = self.canvas.winfo_width() 43 self.started = False 44 self.canvas.bind_all('<KeyPress-Left>',self.turn_left) 45 self.canvas.bind_all('<KeyPress-Right>',self.turn_right) 46 self.canvas.bind_all('<Button-1>',self.start_game) 47 def turn_left(self,evt): 48 self.x =-2 49 def turn_right(self,evl): 50 self.x = 2 51 def start_game(self,evt): 52 self.started = True 53 def draw(self): 54 self.canvas.move(self.id,self.x,0) 55 pos = self.canvas.coords(self.id) 56 if pos[0]<= 0: 57 self.x = 0 58 elif pos[2]>=self.canvas_width: 59 self.x =0 60tk=Tk() 61tk.title("Game") 62tk.resizable(0,0) 63tk.wm_attributes("-topmost",1) 64canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0) 65canvas.pack() 66tk.update() 67paddle = Paddle(canvas,'blue') 68ball = Ball(canvas,paddle,'red') 69while True: 70 if ball.hit_bottom == False and paddle.started == True: 71 ball.draw() 72 paddle.draw() 73 ball.draw() 74 paddle.draw() 75 tk.update_idletasks() 76 tk.update() 77 time.sleep(0.01) 78
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
エラーメッセージはそこだけでなく、全て載せていただけますか。
また、質問はエラーメッセージのこと以外にもあるようですが、「gameをスタートする機能を作りたかったのですがコードを書いてもゲームの仕様が変わりません。」では何が知りたいのかわかりません。
回答1件
あなたの回答
tips
プレビュー