Beispiele und Aufgabe

Beispiel

Das Beispiel besteht aus zwei Dateien: die erste Datei beinhaltet die Definition der Klasse Kreis. Die zweite Datei beinhaltet das Hauptprogramm, welches Kreis-Objekte erzeugt und die Methoden der Kreis-Klasse verwendet. Es empfiehlt sich, für die beide Dateien einen separaten Ordner zu erstellen.

Bevor die die Klasse Kreis definieren, überlegen wir uns, was unsere Kreis für Eigenschaften haben soll und was unser Kreis können soll:

Eigenschaften:

  • Mittelpunkt gegeben durch Koordinaten x,y
  • Radius des Kreises

Methoden:

  • move(x,y) – Kreis um gegebene Grösse in x- und y-Richtung verschieben
  • toTop() – den Kreis ganz nach oben schieben
  • getY() – die aktuelle y-Koordinate des Kreises zurückliefern
"""
Kreis-Klasse
Sebastian Forster (fts)
5.12.2018
"""

class Kreis:

    def __init__(self, canvas, x, y, r):
        self._canvas = canvas
        self._x = x
        self._y = y
        self._r = r
        self._oval = self._canvas.create_oval(x-r, y-r, x+r, y+r, width=1)
        self._point = self._canvas.create_oval(x-1, y-1, x+1, y+1, width=3)

    def move(self, x, y):
        self._x = self._x + x
        self._y = self._y + y
        self._canvas.move(self._oval, x, y);
        self._canvas.move(self._point, x ,y);

    def toTop(self):
        self.move(0, -600)

    def getY(self):
        return self._y

Wir sehen nun, unser Kreis ist durch die Werte x, y und r gegeben. Dargestellt wird der Kreis als zwei Ovals auf dem Canvas. Unsere move-Methode muss natürlich beide Elemente verschieben. Hingegen könne wir uns bei der toTop-Methode der schon programmierten move-Methode bedienen.

Zuerst testen wir die selbst geschriebene Kreis-Klasse in einem minimalen Testprogramm, in welchem wir ein Kreis-Objekt erstellen und alle Methoden ausprobieren:

"""
Teste die Kreis-Klasse
Sebastian Forster (fts)
12.12.2018
"""

from appJar import gui
from kreis import Kreis

def bewegeKreis():
    kreis.move(0.4, 2)

app=gui()
app.setSize(800,600)
canvas = app.addCanvas("c1")

kreis = Kreis(canvas, 300, 600, 20)

print("y-Koordinate: ", kreis.getY())
kreis.toTop()
print("y-Koordinate: ", kreis.getY())

app.registerEvent(bewegeKreis)
app.setPollTime(100)
app.go()

Nun können wir die selbst definierte Kreis-Klasse in unserem Programm einsetzen, indem wir die Datei importieren und dann Kreis-Objekte erzeugen und deren Methoden aufrufen:

"""
Kreisanimation mit eigener Klasse
Sebastian Forster (fts)
5.12.2018
"""

from appJar import gui
import random
from kreis import Kreis

def bewegeKreise():
    for kreis in kreise:        
        if kreis.getY() > 600:  
            kreis.toTop()  
        else:
            kreis.move(0.1, 2)

app=gui()
app.setSize(800,600)
canvas = app.addCanvas("c1")

kreise = []

i = 0
while i < 100:
    x = random.randint(0, 800)
    y = random.randint(0, 600) 
    k = Kreis(canvas, x, y, 5)
    kreise.append(k)
    i = i + 1

app.registerEvent(bewegeKreise)
app.setPollTime(100)
app.go()

Aufgaben

Stelle die Animation auf Objekte um:

  1. erstelle eine eigene Klasse Flocke in einer neuen Datei
  2. ersetze in deiner Datei die Schneeflocken in der Liste durch Objekte deiner neuen Klasse