前提・実現したいこと
88行目のenemy.draw() に関して、5行目からのenemyの定義でdrawのことも定義したのにAttribute Errorとなってしまいます。どうしたらいいですか。
発生している問題・エラーメッセージ
Attribute error
該当のソースコード
from tkinter import * import random import time class Enemy: def __init__ (self, canvas, player, color): self.canvas = canvas self.player = player self.id = canvas.create_oval(10, 10, 25, 25, fill=color) self.canvas.move(self.id, 245, 100) starts = [-3, -2, -1, 1, 2, 3] random.shuffle(starts) self.x = starts[0] self.y = -3 self.canvas_height = self.canvas.winfo_height() self.canvas_width = self.canvas.winfo_width() self.hit_player = False def hit_player(self, pos): player_pos = self.canvas.coords(self.player.id) if pos[2] >=player_pos[0] and pos[0] <= player_pos[2]: if pos[3] >= player_pos[1] and pos[3] <= player_pos[3]: return True return False def draw(self): self.canvas.move(self.id, self.x, self.y) pos = self.canvas.coords(self.id) if pos[1] <= 0: self.y = 3 if pos[3] >= self.canvas_height: self.hit_player = True if self.hit_player(pos) == True: self.y = -3 if pos[0] <= 0: self.x = 3 if pos[2] >= self.canvas_width: self.x = -3 class Player: def __init__(self,canvas,color): self.canvas = canvas self.id = canvas.create_rectangle(30, 30, 70, 70, fill=color) self.canvas.move(self.id, 200,300) self.x = 0 self.canvas_width = self.canvas.winfo_width() self.canvas.bind_all('<KeyPress-Left>', self.turn_left) self.canvas.bind_all('<KeyPress-Right>', self.turn_right) self.canvas.bind_all('<KeyPress-space>', self.game_start) self.state = 1 def draw(self): self.canvas.move(self.id, self.x, 0) pos = self.canvas.coords(self.id) if pos[0] <= 0: self.x = -0 elif pos[2] >= self.canvas_width: self.x = 0 def turn_left(self, evt): self.x = -2 def turn_right(self, evt): self.x = 2 def game_start(self, evn): self.state = 2 tk = Tk() tk.title("Game") tk.resizable(0,0) tk.wm_attributes("-topmost",1) canvas = Canvas(tk, width=500, height=400, bd=0,highlightthickness=0) canvas.pack() tk.update() player = Player(canvas, 'green') enemy = Enemy(canvas, player, 'yellow') while True: if player.state == 1: canvas.create_rectangle(500, 400, 0, 0, fill='white', tag="start_screen") canvas.create_text(250, 80, text = '-- ゲーム --', fill='black', font=('Arial', 20), tag="start_message") canvas.create_text(250, 200, text = 'PUSH SPACE', fill='black', font=('Arial', 20), tag="start_message") if enemy.hit_player == False and player.state == 2: enemy.draw() player.draw() canvas.delete("start_message") canvas.delete("start_screen") time.sleep(0.01) if enemy.hit_player == True: canvas.create_rectangle(500, 400, 0, 0, fill='white') canvas.create_text(250, 150, text = 'GAME OVER!', fill='red', font=('Arial', 50)) tk.update_idletasks() tk.update() time.sleep(0.01)
試したこと
スペリングや字下げに関してミスが無いか確認した。playerのdrawと混ざったのかと思い名前を変えてみた。
補足情報(FW/ツールのバージョンなど)
Python(3,10,0)を使いました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。