Seite 1 von 1

kleines Problem mit Parameter

Verfasst: Montag 4. Mai 2015, 17:14
von timon9104
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!

Re: kleines Problem mit Parameter

Verfasst: Montag 4. Mai 2015, 17:23
von Sirius3
@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.