Bei meinen Versuchen, Daniel Shiffmans »The Nature of Code« nach Python zu portieren, bin ich erst einmal von Graphics.py zu Pygame Zero gewechselt, nachdem mich die ersten Versuche mit John Zelles Bibliothek nicht zufriedengestellt hatten. Fühlt sich irgendwie besser an und zeigt, da keinen Boilerplate-Overhead, die Algorithmen mehr oder weniger pur. Allerdings ist die Qualität der Darstellung graphischer Primitive (Kreis, Rechteck, Linie etc.) etwas gewöhnungsbedürftig. Ich glaube, ich werde in einem nächsten Schritt auf Bilder (vermutlich von Twitters Twemojis »ausgeborgt«) ausweichen.
Ansonsten – für Neugierige – das Progrämmchen, soweit ich es an einem dusseligen Sonnabend-Nachmittag hingerotzt habe. Da sich Pygame Zero bei der objektorientierten Programmierung irgendwie ziert, mußte ich natürlich gegensteuern und die Bällchen erst einmal in eine Klasse auslagern. Das ist die Datei ball.py
:
from pvector import PVector WIDTH = 400 HEIGHT = 400 class Ball(): def __init__(self, x, y, v_x, v_y, radius, color): self.position = PVector(x, y) self.radius = radius self.color = color self. velocity = PVector(v_x, v_y) def show(self, screen): screen.draw.filled_circle((self.position.x, self.position.y), self.radius, self.color) def move(self): self.position.add(self.velocity) if (self.position.x > WIDTH - self.radius) or (self.position.x < self.radius): self.velocity.x *= -1 if (self.position.y > HEIGHT - self.radius) or (self.position.y < self.radius): self.velocity.y *= -1
Wie üblich, ist nahezu die vollständige Logik des Algorithmus’ in der Klasse implementiert worden (daher wird auch die Klasse PVector
) nur hier benötigt. So schrumpft das Hauptprogramm auf wenige Zeilen Code zusammen:
import pgzrun from ball import Ball WIDTH = 400 HEIGHT = 400 TITLE = "Bouncing Ball" ball1 = Ball(200, 150, 1.0, 3.3, 16, "red") ball2 = Ball(100, 100, 1.5, 5.0, 16, "blue") def draw(): screen.fill("yellow") ball1.show(screen) ball2.show(screen) def update(): ball1.move() ball2.move() pgzrun.go()
Als nächstes werde ich das alles noch ein wenig aufhübschen und mich danach wieder in Shiffmans Werk vertiefen. Ist nämlich für mich genau die richtige Beschäftigung, um mich von Corona und anderem abzulenken. Still digging!
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter Rentner, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!
Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.
Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.
Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes
von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.
Werbung
Diese Spalte wurde absichtlich leergelassen!