image image


image

»The Nature of Code« reloaded (again) mit der Python Arcade Bibliothek

Oops! I did it again! Ich bin momentan so fasziniert von der Python Arcade Bibliothek, daß ich mich hingesetzt habe und die Sketche aus dem ersten Kapitel von Daniel Shiffmans Buch »The Nature of Code« noch einmal portiert habe. Diesmal eben nicht nach Pygame Zero, sondern nach Arcade. Und es hat Spaß gemacht. 🤓

Den vollständigen Quellcode der Skripte e_1_7 bis e_1_11 findet Ihr in meinem GitHub-Repositorium, die möchte ich hier nicht widerkäuen. Als Beispiel für die Eleganz der Python Arcade Bibliothek zeige ich hier nur das abschließende Skript, in dem viele Mover der Maus folgen:

import arcade
import random
from pvector import PVector

WIDTH = 400
HEIGHT = 400
TITLE = "Many Movers follow Mouse"
NO_MOVERS = 15

colorlist = [(239, 242, 63), (198, 102, 230), (151, 87, 165), (129, 122, 198), (98, 199, 119)]

class Mover():
    
    def __init__(self):
        self.radius = random.randrange(10, 20)
        self.mouse = PVector(200, 200)
        # Position und Velocity
        x = random.randrange(self.radius, WIDTH - self.radius)
        y = random.randrange(self.radius, HEIGHT - self.radius)
        self.position = PVector(x, y)
        v_x = random.randrange(-10, 10)
        v_y = random.randrange(-10, 10)
        self.velocity = PVector(v_x, v_y)
        # Maximalgeschwindigkeit
        self.topspeed = 10
        # Farbe
        self.color = random.choice(colorlist)
        
    def draw(self):
        arcade.draw_circle_filled(self.position.x, self.position.y, self.radius, self.color)
        arcade.draw_circle_outline(self.position.x, self.position.y, self.radius, arcade.color.BLACK)
    
    def update(self):
        dir = self.mouse - self.position
        dir.normalize()
        dir.mult(0.5)
        self.acceleration = dir
        self.velocity.add(self.acceleration)
        self.velocity.limit(self.topspeed)
        self.position.add(self.velocity)
    
        if (self.position.x >= WIDTH + self.radius):
            self.position.x = -self.radius
        elif (self.position.x <= -self.radius):
            self.position.x = WIDTH - self.radius
        if (self.position.y >= HEIGHT + self.radius):
            self.position.y = -self.radius
        elif (self.position.y <= -self.radius):
            self.position.y = HEIGHT - self.radius

class MyWindow(arcade.Window):
    
    def __init__(self):
        super().__init__(WIDTH, HEIGHT, TITLE)
        arcade.set_background_color(((149, 224, 245)))
        self.movers = []
        for _ in range(NO_MOVERS):
            self.movers.append(Mover())
    
    def on_draw(self):
        arcade.start_render()
        
        for mover in self.movers:
            mover.draw()
    
    def on_update(self, delta_time):
        for mover in self.movers:
            mover.update()

    def on_mouse_motion(self, x, y, dx, dy):
        for mover in self.movers:
            mover.mouse = PVector(x, y)

MyWindow()
arcade.run()

Die Python Arcade Bibliothek kommt viel besser mit der objektorientierten Programmierung zurecht als Pygame Zero (das ist zumindest mein Eindruck) und so liegt die ganze Kraft dieser Portierung in der Klasse Mover, so wie es auch Shiffman in seinen Processing (Java)-Sketchen gewollt hat.

Mir gefällt das so sehr, daß ich die nächsten Kapitel versuchsweise ebenfalls nach Arcade portieren möchte. Und da die Arcade-Bibliothek die Physik-Engine Pymunk unterstützt, sollte dies selbst für Teile des fünften Kapitels (das sich mit Physik-Engines befaßt) möglich sein. Still digging!


(Kommentieren) 

image image



Ü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!


Werbung


image  image  image
image  image  image


image