from tkinter import *
import random
import time

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()

class Ball:
    def __init__(self, canvas, color):
        self.canvas = canvas
        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()

    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]:
                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.y = -3
        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, paddle, color):
        self.canvas = canvas
        self.paddle = paddle
        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.canvas.bind_all('<KeyPress-Left>', self.turn_left)
        self.canvas.bind_all('<KeyPress-Right>', self.turn_right)

    def draw(self):
        self.canvas.move(self.id, self.x, 0)
        pos = self.canvas.coords(self.id)
        if pos[1] <= 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

paddle = Paddle(canvas, 'blue') - line 70 is here
ball = Ball(canvas, paddle, 'red') 

while 1:
    ball.draw()
    paddle.draw()
    tk.update_idletasks()
    tk.update()
    time.sleep(0.015)

मुझे एक त्रुटि मिलती है जो इस तरह दिखती है:

पंक्ति 70, चप्पू में = चप्पू (कैनवास, 'नीला') लेखन त्रुटि: init() में 1 आवश्यक स्थितिगत तर्क मौजूद नहीं है: 'रंग'

मैंने अपना पैडल क्लास कोड ठीक करने की कोशिश की लेकिन यह मेरे लिए ठीक लग रहा है। भले ही मेरे पास रंग तर्क है, फिर भी यह मुझे एक त्रुटि देता है

0
voltifer 12 मार्च 2020, 07:08
def __init__(self, canvas, paddle, color): आपकी पैडल क्लास को 3 तर्कों की आवश्यकता है।
 – 
alec
12 मार्च 2020, 07:10
लेकिन उसके बाद मुझे एक और त्रुटि मिलती है:
 – 
voltifer
12 मार्च 2020, 07:22
फ़ाइल "C:\Users\\Documents\What I create with Python\Working on\MyBookGame.py", लाइन 48, init में self.paddle = पैडल NameError: नाम 'paddle' परिभाषित नहीं है
 – 
voltifer
12 मार्च 2020, 07:22
ऐसा लगता है कि paddle तर्क अनावश्यक है, बस इसे कंस्ट्रक्टर से बाहर निकालें।
 – 
alec
12 मार्च 2020, 07:23
हाँ, लेकिन मेरे द्वारा इसे हटाने के बाद भी यह मुझे इसे कॉल करने के लिए कहेगा। तो मुझे एक त्रुटि मिलती है: लाइन 70, <मॉड्यूल> बॉल = बॉल (कैनवास, पैडल, 'रेड') में टाइप एरर: __init__() में 3 स्थितिगत तर्क होते हैं लेकिन 4 दिए गए थे
 – 
voltifer
12 मार्च 2020, 07:33

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आपने Ball और Paddle के लिए कंस्ट्रक्टर्स को मिला दिया है। यह इस तरह होना चाहिए।

class Ball:
    def __init__(self, canvas, paddle, color):
        self.canvas = canvas
        self.paddle = paddle
        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()

और

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.canvas.bind_all('<KeyPress-Left>', self.turn_left)
        self.canvas.bind_all('<KeyPress-Right>', self.turn_right)

और अब यह काम करेगा

paddle = Paddle(canvas, 'blue')
ball = Ball(canvas, paddle, 'red') 
2
alec 12 मार्च 2020, 07:38
धन्यवाद दोस्त। नहीं, वास्तव में, आपने अपना समय बर्बाद किया ताकि आप मेरी मदद कर सकें। आपका बहुत-बहुत धन्यवाद
 – 
voltifer
12 मार्च 2020, 07:42