kleines Problem mit Parameter

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
timon9104
User
Beiträge: 2
Registriert: Montag 4. Mai 2015, 16:37

Hallo ich habe ein Problem mit dem Spiel BOUNCE (so etwas wie pingpong)
ich glaube ziemlich alles richtig gemacht zu haben aber wenn ich es ausführe sehe ich nur ein Fenster und kein ball oder ein Schläger
Ich arbeite mit Python 3.4.3rc1

Es kommt immer die Fehlermeldung:
Traceback (most recent call last):
File "C:\Users\Timon Wanner\Desktop\Projekt.py", line 76, in <module>
schläger = Schläger(canvas, 'blue')
TypeError: object() takes no parameters

Code: Alles auswählen

from tkinter import *
import random
import time


class Ball:
    def _init_(self, canvas, color):
        self.canvas = canvas
        self.canvas = schläger
        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 triff_schläger(self, pos):
        schläger_pos = self.canvas.coords(self.schläger.id)
        if pos[2] >= schläger_pos[0] and pos[0] <= schläger_pos[2]:
            if pos[3] >= schläger_pos[1] and pos[3] <= schläger_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_bottom = True
        if self.triff_schläger(pos) == True:
            self.x = -3
        if pos[0] <= 0:
            self.x = 3
        if pos[2] >= self.canvas_width:
            self.x = -3


class Schläger:
    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.blind_all('<KeyPress-Left>', self.nach_links)
        self.canvas.blind_all('<KeyPress-Right>', self.nach_rechts)
        
    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 nach_links(self, evt):
        self.x = -2
    def nach_rechts(self, evt):
        self.x = 2


tk = Tk()
tk.title("Spiel")
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack()
tk.update()


schläger = Schläger(canvas, 'blue')
ball = Ball(canvas, schläger, 'red')


while 1:
    if ball. hit_bottom == False:
        ball.draw()
        schläger.draw()
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)

Kennt jemand die Lösung.....? währe sehr dankbar!
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@timon9104: es gibt Methoden in Python, die spezielle Aufgaben haben, wie z.B. __init__. Sie beginnen und enden mit zwei Unterstrichen. Bei Dir ist es nur einer.
Antworten