Hässlicher Programmaufbau -- Trick gesucht.
Verfasst: Freitag 6. März 2015, 22:25
N'abend. Inner Schule ham wir die Aufgabe bekommen, mit Tkinter+Canvas ein Spiel zu programmieren, wo sich ein Ball über den Bildschirm bewegt und der Spieler einen Punkt kriegt, wenn er den anklickt. So weit, so simpel.
Ahaber (und jetzt kommt der Haken): Weil sich der Ball ständig bewegen soll, kann ich ja nich einfach fenster.mainloop() aufrufen. Da haben ich (und vermutl meine Mitschüler auch) uns was gebastelt a la
while True: fenster.update() und in der Schleife dann auch den Bewegungscode.
Da man aber auch Punkte kriegen will, wenn man auf den Ball klickt, brauchen wir einen Event-Handler, der die Punktzahl modifiziert. Den hab ich mit .bind ans Canvas rangetackert. Ist aber eine Funktion, die eine globale Variable modifiziert. Böse, ich weiß! Aber darum solls hier nich gehen.
Ich hab also
einerseits das Bewegen des Balles in nem linearen Programmablauf,
sowie das Punktezählen in nem Event-Handler.
Das gefällt mir nicht. Ich will
entweder den Ball auch in nem Event-Handler bewegen. Der müsste dann ja mit nem Timer-Event aufgerufen werden. Gibts sowas in Tk? Hab im Internetz nix gefunden.
Oder aber, ich zähle die Punkte auch in der Schleife. Wäre ich mit Pygame unterwegs, würde ich in pygame.event.get() nach Klick-Events schauen. Gibts sowas wie pygame.event.get() bei Tk? Hab auch dafür im Internet nix gefunden.
Naja, Tk und v.a. dessen Canvas sind sowieso n bissl komisch. Wundert mich ehrlich gesagt, dass der #! überhaupt in der Stdlib gelandet sind.
In der Hoffnung, sich verständlich ausgedrückt zu haben,
verbleibt mit freundlichen Grüßen,
Y.
Ahaber (und jetzt kommt der Haken): Weil sich der Ball ständig bewegen soll, kann ich ja nich einfach fenster.mainloop() aufrufen. Da haben ich (und vermutl meine Mitschüler auch) uns was gebastelt a la
while True: fenster.update() und in der Schleife dann auch den Bewegungscode.
Da man aber auch Punkte kriegen will, wenn man auf den Ball klickt, brauchen wir einen Event-Handler, der die Punktzahl modifiziert. Den hab ich mit .bind ans Canvas rangetackert. Ist aber eine Funktion, die eine globale Variable modifiziert. Böse, ich weiß! Aber darum solls hier nich gehen.
Ich hab also
einerseits das Bewegen des Balles in nem linearen Programmablauf,
sowie das Punktezählen in nem Event-Handler.
Das gefällt mir nicht. Ich will
entweder den Ball auch in nem Event-Handler bewegen. Der müsste dann ja mit nem Timer-Event aufgerufen werden. Gibts sowas in Tk? Hab im Internetz nix gefunden.
Oder aber, ich zähle die Punkte auch in der Schleife. Wäre ich mit Pygame unterwegs, würde ich in pygame.event.get() nach Klick-Events schauen. Gibts sowas wie pygame.event.get() bei Tk? Hab auch dafür im Internet nix gefunden.
Naja, Tk und v.a. dessen Canvas sind sowieso n bissl komisch. Wundert mich ehrlich gesagt, dass der #! überhaupt in der Stdlib gelandet sind.
In der Hoffnung, sich verständlich ausgedrückt zu haben,
verbleibt mit freundlichen Grüßen,
Y.