Code: Alles auswählen
class Vektor2D:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
if not isinstance(other, Vektor2D):
raise ValueError(f'{other} ist kein Vektor: Keine Addition möglich')
return Vektor2D(self.x + other.x, self.y + other.y)
def __str__(self):
return f" {self.x:.2f}, {self.y:.2f}"
def __repr__(self):
return f"Vektor2D({self.x}, {self.y})"
class Ball:
def __init__(self, idx, position=Vektor2D(0,30), geschwindigkeit=Vektor2D(0, 0),
beschleunigung=Vektor2D(0, 3)):
self.id = idx
self.position = position # Position des Balls
self.geschwindigkeit = geschwindigkeit # Ausgangsgeschwindigkeit in beide Richtungen
self.beschleunigung = beschleunigung # Beschleunigung in beide Richtungen
def __str__(self):
return f'Ball Nr {self.id} mit Geschwindigkeit {self.geschwindigkeit} auf pos {self.position}'
def update(self):
self.geschwindigkeit.y += self.beschleunigung.y
self.position.y += self.geschwindigkeit.y
class Game:
def __init__(self):
self.ball = Ball(idx=1, position=Vektor2D(0, 20))
self.ball2 = Ball(idx=2, position=Vektor2D(0, 20))
def run(self):
for _ in range(3):
self.ball.update()
self.ball2.update()
# Eigentlich sollten die Bälle nun gleich sein!!
print(f'Ball 1 nach Update: {self.ball}')
print(f'Ball 2 nach Update: {self.ball2}')
print('--------------------------------')
game = Game()
game.run()
Ich vermute, dass es etwas mit der update Methode in der Ball Klasse zu tun hat, da es funktioniert, wenn ich das .y weglasse. Ich kann mir allerdings nicht erklären, warum mein Code zu einem falschen Ergebnis führt.
Kann mir da bitte jemand weiterhelfen?