TigerJython | xx für Gymnasien |
Alle Spielfiguren werden als Objekte einer Klasse, die von der Klasse Actor abgeleitet sind, aufgefasst. Dadurch lässt sich bereits bei den ersten Programmbeispielen das OOP-Konzept vorbildlich realisieren. Jedem Actor ist ein Sprite-Bild zugeordnet. Ein Actor kann aber auch mehrere Sprites haben.
Die Definition einer Klasse in Python beginnt mit dem Schlüsselwort class. Der Klassennamen wird mit grossem Anfangsbuchstaben geschrieben. Wird eine Klasse abgeleitet, so muss der Name der Basisklasse in einer Klammer angegeben werden. Abgeleitete Klassen erben alle Methoden der Basisklasse, man kann aber auch weitere Methoden hinzufügen. Eine Methode unterscheidet sich von einer Funktion nur in zwei Aspekten:
-
sie ist innerhalb einer class-Definition definiert
-
der erste Parameter einer Methode ist immer self
Eine Klasse besitzt eine spezielle Methode, den sogenannten Konstruktor. Die Konstruktoren in Python werden immer mit def __init__(self) definiert (zwei Underlines vor und nach init). In der Programmstruktur erfolgen die Klassendefinition immer vor dem Hauptblock. Um das Programm übersichtlicher zu gestalten, fügen wir vor der Klassendefinition und vor dem Beginn des Hauptblocks Kommentarlinien ein. Beispiel 1: Wir definieren eine Klasse Fish, die von der Klasse Actor abgeleitet ist und lassen ein Objekt dieser Klasse im Spielfenster erscheinen. Der Klasse Fish ist das Spritebild nemo.gif zugeordnet. Damit ein Fisch im Spielfenster erscheint, müssen wir im Hauptprogramm ein Objekt dieser Klasse erzeugen. Wir nennen es nemo und erzeugen es durch Aufruf des Klassennamens. Mit addActor(nemo, Location(1, 3)) wird nemo zum Spielfenster in der Zelle (1, 3) hinzugefügt (die Nummerierung der Zellen beginnt bei 0). Man kann mehrere Objekte der Klasse Fish erzeugen und zum Spielfenster hinzufügen.
|
# Gg2.py from gamegrid import * # ------------- class Fish ------------------------------- class Fish(Actor): def __init__(self): Actor.__init__(self, "sprites/nemo.gif") # ---------------- main ---------------------------------- makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif") nemo = Fish() addActor(nemo, Location(1, 3)) wanda = Fish() addActor(wanda, Location(6, 7)) show() |
Erklärungen zum Programmcode:
class Fish(Actor): Die Klasse Fish wird von der Klasse Actor abgeleitet und erbt dadurch alle Methoden dieser Klasse | |
Actor.__init__(self, "sprites/nemo.gif") Der Konstruktor der Basisklasse Actor wird aufgerufen. Diesem übergibt man den Pfad des Sprite-Bildes |
Beachte:
Alle Actor-Spritebilder, die in unserer Lernumgebung verwendet werden, sind in der TigerJython-Distribution enthalten (siehe TigerJython IDE unter "Hilfe/APLU Dokumentation/Bildbibliothek"). Sie können auch eigene Bilder verwenden. Die Actor-Bilder sind etwa 50x50 Pixel gross und haben einen transparemten Hintergrund. Sie können im beliebigen Ordner auf Ihrem Computer gespeichert sein. Im Programm geben Sie den Pfad der Bilddatei an: Unter MacOS z.B. Unter Windows können Sie die eigenen Bilder auch im Unterverzeichnis sprites des Unterverzeichnises /bin des Installationsverzeichnisses speichern. Mit Actor.__init__(self, "sprites/bild.gif") werden sie automatisch in Ihrem Programm integriert. |
Man kann auch mehrere Aktors der Klasse Fisch erzeugen, ohne diese einzeln zu benennen. Dann ruft man in der Funktion addActor() den Klassennamen Fisch() auf und gibt danach die gewünschte Position an.
# Gg2a.py from gamegrid import * # ------------- class Fish ------------------------------- class Fish(Actor): def __init__(self): Actor.__init__(self, "sprites/nemo.gif") # ---------------- main ---------------------------------- makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif") addActor(Fish(), Location(1, 3)) addActor(Fish(), Location(6, 7)) show() |
Aufgaben: |
1) |
|
2) |
Erzeuge 10 Pacman-Actors, die im Spielfenster in der Diagoname angeordnet sind. Verwende eine for-Schleife. |