выдает ошибку: TypeError: __init__() missing 1 required positional argument: 'color'

Killdoz

Новичок
Пользователь
Апр 26, 2020
11
0
1
Python:
from tkinter import *
import random
import time

class Ball:
    def __init__(self, canvas, paddle, score, color):
        self.canvas = canvas
        self.paddle = paddle
        self.score = score
        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_bottom = False
    def hit_paddle(self, pos):
        paddle_pos = self.canvas.coords(self.paddle.id)
        if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
            if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
                self.x += self.paddle.x
                self.score.hit()
                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_bottom = True
        if self.hit_paddle(pos) == True:
            self.y = -3
        if pos[0] <= 0:
            self.x = 3
        if pos[2] >= self.canvas_width:
            self.x = -3
            
class Paddle:
    def __init__(self, canvas, color):
        self.canvas = canvas
        self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color)
        self.canvas.move(self.id, 200, 300)
        self.x = 0
        self.canvas_width = self.canvas.winfo_width()
        self.started = False
        self.canvas.bind_all('<KeyPress-Left>', self.turn_left)
        self.canvas.bind_all('<KeyPress-Right>', self.turn_right)
        self.canvas.bind_all('<Button-1>', self.start_game)
    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 start_game(self, evt):
        self.started = True
class Score:
    def __init__(self, canvas, color):
        self.score = 0
        self.canvas = canvas
        self.id = canvas.create_text(450, 10, text=self.score, fill=color)
    def hit(self):
        self.score += 1
        self.canvas_itemconfig(self.id, text=self.score)
        
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()

score = Score(canvas, 'green')
paddle = Paddle(canvas, 'blue')
ball = Ball(canvas, paddle, 'red')
game_over_text = canvas.create_text(250, 200, text='Game Over!', state='hidden')

while 1:
    if ball.hit_bottom == False and paddle.started == True:
        ball.draw()
        paddle.draw()
    if ball.hit_bottom == True:
        time.sleep(1)
        canvas.itemconfig(game_over_text, state='normal')
    ball.draw()
    paddle.draw()
    tk.update_idletasks()
    tk.update()
    time.sleep(0.03)
 

Vlad_SD

Активный пользователь
Пользователь
Апр 7, 2020
91
45
18
Python:
class Ball:
    def __init__(self, canvas, paddle, score, color):
в ошибке явно указано, что при создании экземпляра класса не был передан аргумент color
Код:
ball = Ball(canvas, paddle, 'red')

при создании экземпляра аругменты были переданы так:
canvas = canvas
paddle = paddle
score = 'red'
соотвественно color не было передано ничего, что и приводит к ошибке
 
  • Мне нравится
Реакции: borntohack и Student

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
Это "Python для детей" Джейсона Бриггса? Я отказался от этой книги именно из-за того, что приведённый им код - нерабочий.
 

Killdoz

Новичок
Пользователь
Апр 26, 2020
11
0
1
Это "Python для детей" Джейсона Бриггса? Я отказался от этой книги именно из-за того, что приведённый им код - нерабочий.
Да, это ''Python для детей Джейсона Бригса''.
 

Killdoz

Новичок
Пользователь
Апр 26, 2020
11
0
1
Это "Python для детей" Джейсона Бриггса? Я отказался от этой книги именно из-за того, что приведённый им код - нерабочий.
Я выбрал ее только потому что мне только 12 и это единственная книга в которой я все понимаю. До этого я пробовал еще 2 книги но там я ничего не понимал.
 
Последнее редактирование:

Killdoz

Новичок
Пользователь
Апр 26, 2020
11
0
1
Python:
class Ball:
    def __init__(self, canvas, paddle, score, color):
в ошибке явно указано, что при создании экземпляра класса не был передан аргумент color
Код:
ball = Ball(canvas, paddle, 'red')

при создании экземпляра аругменты были переданы так:
canvas = canvas
paddle = paddle
score = 'red'
соотвественно color не было передано ничего, что и приводит к ошибке
спасибо
 

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
Я выбрал ее только потому что мне только 12 и это единственная книга в которой я все понимаю. До этого я пробовал еще 2 книги но там я ничего не понимал.
Что за книги?
 

Killdoz

Новичок
Пользователь
Апр 26, 2020
11
0
1
Легкий способ выучить Пайтон - Зед Шоу и Учим Пайтон, делая крутые игры - Эл Свейгарт.
 

Форум IT Специалистов