Jython

Actors

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.

 

 
Ausführen mit Webstart
# 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()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

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 Windows z.B.
Actor.__init__(self, "c:/users/UrsMeier/desktop/bilder/bild.gif")
oder Actor.__init__(self, "d:/bilder/bild.gif")

Unter MacOS z.B.
Actor.__init__(self, "/Users/UrsMeier/Desktop/Bilder/bild.gif")

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()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 


Aufgaben:

1)


Erzeuge ein Spielfenster mit 10 x10 Zellen der Grösse 60 Pixel und roten Gitterlinien, ohne Hintergrundbild und ohne Navigationsbalken. Nimm das Beispiel Gg2.py als Vorlage und schreibe eine Klasse Pacman(). Erzeuge dann drei Actors paki1, paki2 und paki3 an den Positionen (1, 1), (3, 5) und (7, 3).


 

2)

Erzeuge 10 Pacman-Actors, die im Spielfenster in der Diagoname angeordnet sind. Verwende eine for-Schleife.