Home
Solist - Dietrich Boles
Contents
1. param e enth lt Details zum eingetretenen Event Wird aufgerufen wenn ein mouseExited Event auf der Komponente eingetreten ist d h der Mauszeiger das Icon der Komponente verl sst Soll eine Komponente auf mouseExited Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mouseExited Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf mouseExited Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein 110 Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden x param e enth lt Details zum eingetretenen Event 4 public void mouseExited Mouselnfo e 9 2 2 Actor package theater HH HH HO3H H2 HO HO3 HOCH HH HH HH H
2. l void main 2 EI Classes 3 gt C Stage a EI Actor T T T T DI Prop C Performance c3 Other jerzlich Willkommen bei Solist Version 1 0 Abb 3 4 Solist Hauptfenster mit dem Hamster Theaterst ck nach dem ffnen 3 2 Schreiben und Ausf hren eines Programms Geben Sie im Editor des Hauptfensters ein kleines Hamster Beispielprogramm ein zum Besipiel void main while vornFrei vor Dr cken Sie zum Kompilieren des Programms in der Toolbar den Compile Button 3 Button der Toolbar von links Wenn das Kompilieren erfolgreich war es erscheint eine Dialogbox mit einer entsprechenden Meludng dr cken Sie zum Ausf hren des Programms in der Toolbar den Start Button 11 Button der Tollbar von links Der Hamster l uft durch das Territorium 3 3 Gestalten des Territoriums Mit Hilfe der Aktionsbuttons rechts in der Toolbar k nnen Sie das Territorium gestalten bspw Mauern und K rner setzen Dr cken Sie auf den jeweiligen Button und dann auf die entsprechende Kachel des Territoriums Sie k nnen die Komponenten auch nachtr glich noch durch Anklicken und Verschieben mit gedr ckter Maustaste im Territorium umplatzieren Weiterhin k nnen Sie ber den Komponenten ein Popup Men aktivieren in dem die Befehle die die Komponente kennt erscheinen und bei Auswahl ausgef hrt werden siehe Abbildung 3 5 20 Solist hamster DER Miniwelt Med
3. param e enth lt Details zum eingetretenen Event y public void mouseDragged MouseInfo e HH E e E E a E a a E a a f Wird aufgerufen wenn ein mouseMoved Event auf der B hn ingetreten ist d h die Maus bewegt wurde w hrend sich der Mauszeiger oberhalb der B hne befindet Soll eine B hne auf mouseMoved Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mouseMoved Events finden sich in der Klasse java awt event MouseMotionListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status 100 gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf mouseMoved Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e HH HH H HK enth lt Details zum eingetretenen Event public void mouseMoved Mouselnfo e Wird aufgerufen wenn ein
4. Die Klasse Actor ist die Basisklasse aller Akteure Si rbt alle Methoden ihrer Oberklasse Component lt p gt lt p gt Im Normalfall gibt es in Solist nur eine Actor Klasse Dies ist die Oberklasse der Solist Klasse von der der Solist erzuegt wird Sollte es mehrere Actor Klassen geben muss der Programmierer die Solist Oberklasse explizit ausw hlen lt p gt lt p gt Im Solist Programm muss die Methode void main berschrieben werden In dieser wird das Eigenleben des Solisten festgelegt wobei u a die geerbten Methoden der Klasse Component genutzt werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 public class Actor extends Component implements Serializable Default Konstruktor der Klasse Actor 59 public Actor Copy Konstruktor der Klasse Actor param actor der zu klonende Akteur public Actor Actor actor die von der Solist Klasse zu berschreibende Method public void main erzeugt eine Instanz der Klasse Solist return der Solist public static Actor createSolist erzeugt einen Clon des uebergebenen Solist 111 param solist der zu klonende Solist return der geklonte Solist f public static Actor cloneSolist Actor solist 9 2 3 Prop package theater import java io Serializable Die Klasse Prop ist die Basisklasse
5. Game of Life Simulator 10 8 Theaterst ck sudoku Das Theaterst ck sudoku erm glicht Programme zu entwickeln die beliebige Sudoku R tsel l sen Sehr sch n veranschaulichen l sst sich hierdurch das Prinzip der Rekursion und des Backtrackings 141 EEE de 28 1 1419 15 I is 1719 Sudoku Simulator 10 9 Theaterst ck damen Das Theaterst ck damen erm glicht Programme zu entwickeln die das bekannte Damen Problem l sen 8 Damen sind auf einem Schachbrett so zu platzieren dass sie sich gegenseitig nicht schlagen k nnen Genauso wie beim sudoku Theaterst ck l sst sich hierdurch das Prinzip der Rekursion und des Backtrackings sehr sch n veranschaulichen W Damen Simulator 10 10Theaterst ck springer Das Theaterst ck springer erm glicht Programme zu entwickeln die das bekannte Springer Problem l sen ein Springer beim Schach muss alle Felder eines Schachbretts genau einmal besuchen Genauso wie beim sudoku und beim damen Theaterst ck l sst sich hierdurch das Prinzip der Rekursion und des Backtrackings sehr sch n veranschaulichen 142 Springer Simulator 10 11 Theaterst ck hanoi Das Theaterst ck springer erm glicht Programme zu entwickeln die das bekannte Spiel T rme von Hanoi spielen Genauso wie beim sudoku beim damen und beim springer Theaterst ck l sst sich hierdurch das Prinzip der Rekursion und des Backtrackings sehr sch n veran
6. param x x x Koordinate der linken oberen Ecke des Ovals param y y Koordinate der linken oberen Ecke des Ovals param width 5 Breite des Ovals in Pixeln param height x H he des Ovals in Pixeln public void drawOval int x int y int width int height Zeichnet im TheaterImage ein Polygon in der aktuellen Zeichenfarbe Es wird automatisch ein Linie hinzugef gt die das Polygon schlie t param xPoints o x Koordinaten der Linien param yPoints i y Koordinaten der Linien param nPoints X Anzahl der Liniensegment public void drawPolygon int xPoints int yPoints int nPoints Zeichnet im TheaterImag inen Text im aktuell gesetzten Font param string der zu zeichnende Text 118 param x X x Koordinate an der der Text beginnen soll param y x y Koordinate an der der Text beginnen soll public void drawString String string int x int y Zeichnet ein existierendes TheaterImage an einer bestimmten Stelle in das aufgerufene TheaterImag param image a das TheaterImage das gezeichnet werden soll darf nicht null sein param x x Koordinate an der das Image gezeichnet werden soll param y a y Koordinate an der das Image gezeichnet werden soll public void drawlImage TheaterImage image int x int y F llt das gesamte TheaterImage in der aktuellen Zeichenfarb
7. an Es ffnet sich eine Dateiauswahl Dialogbox die die Bilder des Verzeichnisses images anzeigt W hlen Sie ein Bild aus in unserem Beispiel das Bild mauer24 gif und klicken Sie den OK Button Wenn das Verzeichnis images noch kein sinnvolles Bild enth lt m ssen Sie zun chst eines importieren Men Medien 70 Nun wollen wir dem Button einen aussagekr ftigen Tooltip zuordnen Aktivieren Sie wieder oberhalb des Buttons das Popup Men w hlen Sie das Item Tooltip aus und geben Sie in der erscheinenden Dialogbox den Text Neue Mauer erzeugen ein Als letztes m ssen wir nun noch die Aktion implementieren die ausgel st werden soll wenn ein Benutzer den Button sp ter anklickt Dazu w hlen wir diesmal im Popup Men das Item Editor Es ffnet sich ein Editor mit folgendem Inhalt import theater public class NeueMauer extends NewPropHandler public Prop newProp return null Von Interesse ist die Methode newProp ber die ein neues Prop Objekt erzeugt werden soll In unserem Beispiel soll ja eine neue Mauer erzeugt werden Ersetzen Sie deshalb die Anweisung return null durch die Anweisung return new Mauer Speichern Sie anschlie end die Datei ab und kompilieren Sie Wenn das erfolgreich war klicken Sie den neuen Button an Analog zum Erzeugen neuer Prop Objekte ber das Popup Men der entsprechenden Klasse im Klassenbereich k nnen Sie nun neue Prop Kompo
8. 121 9 return die Breite des TheaterImages in Pixeln 8 public int getWidth Liefert die H he des TheaterImages in Pixeln return die H he des TheaterImages in Pixeln Ar public int getHeight Intern wird ein TheaterIcon durch ein Image Objekt realisiert Diese Methode liefert das entsprechende Objekt Achtung return das aktuelle interne Image Objekt S public java awt Image getAwtlmage 5 Ereignisse 9 5 1 KeylInfo package theater HR HH k E a e a HH HH HH DE Sowohl die Klasse Stage als auch die Klasse Component definieren die von der Java GUI Programmierung bekannten Methoden zur Verarbeitung von Tastatur Events keyTyped keyPressed und keyRealeased Die Events ntsprechen dabei den Events des Java AWT in der Klasse java awt event KeyListener Den Methoden werden Objekte vom Typ KeyInfo bergeben ber die genauere Informationen ber das entsprechende Event abgefragt werden k nnen lt p gt lt p gt Die Klasse KeyInfo ist von der Klasse java awt event KeyEvent abgeleitet so dass auch alle deren Methoden benutzt werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 public class KeyInfo extends java awt event KeyEvent Konstruktor zur Initialisierung eines KeyInfo Objektes mit einem KeyEvent Objek
9. Eine davon ist die in den vergangenen Jahren sehr popul r gewordene Programmiersprache bzw Programmierumgebung Scratch Anders als bei textuellen Programmiersprachen m ssen hier die Programmierer keinen textuellen Sourcecode schreiben Vielmehr setzen sich Scratch Programme aus graphischen Bausteinen zusammen siehe Abbildung 7 24 Die Programmierumgebung unterst tzt dabei das Erstellen von Programmen durch einfache Drag and Drop Aktionen mit der Maus In Scratch k nnen dem Programmierer keine syntaktischen Fehler mehr unterlaufen und auf einen Compiler kann verzichtet werden Mehr Informationen zu Scratch findet man im Internet unter E Scratch 1 4 of 30 Jun 09 sono ED Datei Bearbeiten Ver ffentlichen Bet 2 52 Tor Bewegung Steuerung q Aussehen 4 F hlen Klang Operatoren Skripte K Malstift Variablen Abb 7 24 Scratch Um die Vorteile die Scratch f r Programmieranf nger verspricht auch denjenigen zug nglich zu machen die die mit Solist generierten PLUs nutzen m chten haben wir in Version 2 0 von Solist eine Scratch Variante integriert Davon bekommen Sie in Solist selbst nichts mit au er dass Sie in der Generieren Dialogbox siehe 79 Abbildung 7 22 bei Scratch Variante ein H kchen setzen m ssen In diesem Fall k nnen Benutzer in den generierten PLUs nicht in Java programmieren sondern in der visuellen Programmiersprache Scratch Aktuell wurden von der Basis Theaterst cken hamster
10. 68 7 7 3 Breakpoints Wenn Sie das Programm an einer bestimmten Stelle anhalten m chten k nnen Sie in der entsprechenden Zeile einen so genannten Breakpoint setzen F hren Sie dazu vor oder w hrend der Programmausf hrung im Editor Bereich mit der Maus einen Doppelklick auf die entsprechende Zeilennummer aus Breakpoints werden durch violett hinterlegte Zeilennummern dargestellt siehe Abbildung 7 20 Ein Doppelklick auf einen Breakpoint l scht den Breakpoint wieder Uber der Spalte mit den Zeilennummern l sst sich auch durch Klicken der rechten Maustaste ein Popup Men aktivieren das als Funktionen das Setzen bzw Entfernen von Breakpoints bzw das gleichzeitige L schen aller Breakpoints bietet 1l h 12 void ernteEineReiheUndLaufeZurueck 13 ernteEineReihe 14 kehrt IS laufeZurueck 16 17 E 15 void ernteEineReihe 19 sammle 20 while vornFrei 2L voril 22 Breakpoint in Zeile 21 entfernen alle Breakpoints l schen 7 26 void laufeZurueck Abb 7 20 Breakpoints Wenn Sie ein Programm mit Breakpoints ausf hren wird die Ausf hrung jedesmal pausiert wenn eine Zeile mit einem Breakpoint erreicht wird unabh ngig davon ob die Ablaufverfolgung eingeschaltet ist Durch Dr cken des Start Fortsetzen Buttons kann die Ausf hrung des Programms fortgesetzt werden 7 7 4 Debugger Fenster Das Debugger Fenster wird automatisch bei Aktivierung der Ablauf
11. Neben dem Solist k nnen sich noch Requisiten Prop genauer gesagt ein ihnen jeweils zugeordnetes Ikon auf der B hne befinden Im Unterschied zum Solist sind 26 Requisiten jedoch passive Objekte Und das ist auch schon der einzige Unterschied zwischen dem Solist und Requisiten Programmiertechnisch sind Requisiten n mlich Objekte von Klassen die von der vordefinierten Klasse Prop abgeleitet sind Sowohl die Klasse Actor als auch die Klasse Prop sind aber von der Klasse Component abgeleitet die alle aufrufbaren Methoden f r Akteure und Requisiten definiert Daher werden Akteure und Requisiten im Folgenden auch h ufig unter dem Begriff Komponenten zusammengefasst Requisiten k nnen initial per Drag and Drop Aktion oder durch das Programm erzeugt und auf der B hne platziert werden Sie lassen sich verschieben und rotieren und ihr Ikon kann ausgetauscht werden Es lassen sich Kollisionen zwischen dem Solist und Requisiten berpr fen und auch Requisiten k nnen Tastatur und Maus Event Handler zugeordnet werden Im Hamster Theaterst ck sind Mauern und K rner Requisiten 4 5 Auff hrungen Die Ausf hrung eines Programms wird in Solist mit der Auff hrung des Theaterst cks Performance assoziiert Normalerweise wird dabei eine Standard Auff hrung genutzt Solist Theaterst cken k nnen jedoch auch zus tzliche Klassen zugeordnet werden die die Art der Auff hrung in bestimmten Eigenschaften variieren Dies geschieht durch d
12. break case WEST this setBlickrichtung Hamster SUED break finally Performance getPerformance unlock Abb 3 6 Methode linksUm der Klasse Hamster 21 Der aufgerufene Hamster dreht sich rechtsum Ef Description Der Hamster dreht sich um 90 Grad nach rechts um public void rechtsUm Performance getPerformance lock try switch this blickrichtung case SUED this setBlickrichtung Hamster WEST break case OST this setBlickrichtung Hamster SUED break case NORD this setBlickrichtung Hamster OST break case WEST this setBlickrichtung Hamster NORD break finally Performance getPerformance unlock Speichern Sie anschlie end die nderungen ab im Editor Fenster Men Datei Eintrag speichern und kompilieren Sie durch Dr cken des inzwischen rot erscheinenden Compilier Buttons im Hauptfenster 3 Button der Toolbar von links Wenn Sie syntaktische Fehler gemacht haben erscheint eine Dialogbox mit entsprechenden Hinweisen Wenn alles geklappt hat erscheint eine Dialogbox mit der Meldung OK Hinweis Nach dem Compilieren wird in Solist nicht in den sp ter generierten PLUs das Territorium neu initialisiert 3 5 Generieren einer Programmierlernumgebung Um eine PLU f r das leicht erweiterte Hamster Modell zu generieren w hlen Sie im Men Miniwelt den Eintrag
13. ig wird eine Komponente nicht ber Tastatur und MouseEvents informiert Die Reihenfolge in der Komponenten bzw die B hne ber Maus und Tastatur Events benachrichtigt werden ergibt sich aus der Zeichenreihenfolge Je weiter eine Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events Aufruf der Methode consume kann die Benachrichtigungskette abgebrochen werden 6 2 5 Solist In Solist Theaterst cken existiert immer genau ein Objekt einer Actor Klasse Das ist der so genannte Solist Der Solist muss im Default Konstruktor jeder Stage Klasse erzeugt und auf der B hne plaziert werden Das geschieht durch Aufruf der folgenden Anweisung erzeugt den Solist und platziert in oben links auf der B hne setSolist Actor createSolist 0 0 Die statische Methode createSolist der Klasse Actor erzeugt einen Solist als Instanz der gerade aktiven Actor Klasse wenn es nur eine Actor Klasse gibt wird automatisch diese genommen Die Methode setSolist plaziert den erzeugten Solist auf die entsprechende Zelle der B hne Es ist nicht erlaubt und m glich dass mehrere Solisten gleichzeitig existieren es ist auch nicht m glich den Solist explizit 41 von der B hne zu entfernen man kann ihn jedoch unsichtbar machen und es nicht m glich den Solist zur Laufzeit eines Programms auszuwechseln 6 3 Performance Die Klasse Performance de
14. Generieren Es ffnet sich ein kleines Fenster siehe Abbildung 3 7 Geben Sie einen selbst gew hlten Namen f r Ihre PLU und ein Verzeichnis ein in dem die PLU gespeichert werden soll Dr cken Sie dann auf den OK Button Begeben Sie sich dann in das entsprechend ausgew hlte Verzeichnis Hier finden Sie eine Datei simulator jar die Sie durch Doppelklick starten k nnen Es ffnet 22 sich Ihre erste selbst erstellte Programmierlernumgebung siehe Abbildung 3 8 Sie unterscheidet sich im Wesentlichen dadurch von der Solist IDE dass der Dateibaum rechts im Hauptfenster fehlt Dieser Dateibaum ist f r die Implementierung der Modellwelt zust ndig aber damit sollen die Programmieranf nger ja auch gar nichts mehr zu tun haben Name Hamster Simulator Light Verzeichnis Documents myhamstersimulator Handbuch Online Handbuch Offline Startbild V Debugging Java Simulator Scratch Simulator deutsch Scratch Simulator englisch ok Abbrechen Abb 3 7 Generieren Dialogbox E Hamster Simulator Light DAR Programm B hne Simulation Fenster Hilfe D O al xta 21t ElaN Ex oln e ala l aa l void main 2 while vornFrei 3 4 s 6 Abb 3 8 Generierte Hamster PLU 23 Geben Sie dann im Editor der generierten PLU das folgende Programm ein void main whi
15. cke des generierten Simulators eine deutsche oder englische Bezeichnung verlasse bzw return falls bzw if solange bzw while Diese Bezeichnungen lassen sich allerdings ber Properties nachtr glich noch ver ndern 7 11 Konsole Die Konsole ist ein zus tzliches Fenster das bei bestimmten Aktionen automatisch ge ffnet wird sich aber ber das Men Fenster auch explizit ffnen bzw schlie en l sst siehe Abbildung 7 27 Konsole Optionen Zahl eingeben 4 zahl eingeben 1 zahl eingeben 5 MauerDaException Die Kachel 1 9 ist durch eine Mauer blockiert at Hamster vor Hamster java 190 at Solist main Solist java 5 at simulation ActSimulator run ActSimulator java 47 Abb 7 27 Konsole Die Konsole ist f r die Java Eingabe mittels System in und die Ausgabe mittels System out und System err zust ndig Wird in Ihrem Programm bspw der Befehl System out println hallo ausgef hrt wird die Zeichenkette hallo in der Konsole ausgegeben System out und System err unterscheiden sich durch eine schwarze out bzw eine rote err Ausgabe des entsprechenden Textes Auch Fehlermeldungen des Hamster Simulators erscheinen in der Konsole bspw Laufzeitfehler wenn der Hamster gegen eine Mauer rennt Ein Eingabebefehl via System in blockiert das Hamster Programm so lange bis der Nutzer eine entsprechende Eingabe in der Konsole get tigt und im Allgemeinen durch Dr cken der Enter T
16. ckt wird so k nnen Sie entsprechend die Einr ckung aktivieren Auch die Schriftgr e des Solist Editors l sst sich anpassen Generell lassen sich zwei Typen von PLU unterscheiden die vom Solist Simulator generiert werden k nnen eher imperative PLUs und objektbasierte PLUs Welchen Typ die von Ihnen erstellte PLU unterst tzen soll k nnen Sie im untersten Men Item ausw hlen siehe hierzu auch Abschnitt 7 11 Programm B hne Simulation Fenster Hilfe Compilieren Strg S k Neu Strg Umschalt N Laden Strg Umschalt L Speichern unter Strg Umschalt l Drucken Strg P Ausschneiden Strg X Kopieren Strg C F Einf gen Strg V Y Einr ckung Strg Umschalt Schriftgr e i imperative Solist Programme Strg Umschalt P 17T T T T Abb 5 4 Programm Men Das Men B hne unterst tzt die Handhabung der B hne siehe Abbildung 5 5 ber dieses Men k nnen Sie die aktuell dargestellte B hne abspeichern und sp ter gegebenenfalls wieder laden Au erdem k nnen Sie die aktuell dargestellte B hne auch im PNG oder GIF Format abspeichern B hne Simulation Fenster Hilfe Speichern unter Strg Alt U Laden Strg lt L Als Bild speichern l Abb 5 5 B hne Men B PNG Strg Alt P GIF Strg Alt G 30 Das Menu Simulation stellt Funktionen zur Steuerung der Auff hrung eines Theaterst cks zur Verf gung siehe Abbildung 5 6 Hier werden Sie aber h chstwahrscheinli
17. finden die Theaterst cke im Unter Ordner plays des Solist Ordners siehe auch Kapitel 2 Im Unter Ordner simulatoren finden Sie die aus den Theaterst cken generierten Simulatoren 10 1 Theaterst ck demo und oodemo Die Theaterst cke demo und oodemo sind vollst ndige Versionen der in diesem Handbuch exemplarisch entwickelten Demo Simulatoren 10 2 Theaterst ck hamster Das Theaterst ck hamster spiegelt eine Abbildung des Java Hamster Modells und des Hamster Simulators wider siehe _http www java hamster modell de Programmieranf nger m ssen Programme schreiben in denen sie einen Hamster durch ein virtuelles Territorium steuern und Aufgaben wie das Einsammeln von K rnern oder das Umlaufen von Mauern l sen lassen Hamster Simulator Light Das Theaterst ck hamster demonstriert viele Aspekte von Solist Denjenigen von Ihnen die zum ersten Mal mit Solist arbeiten empfehle ich sich als erstes einmal die einzelnen Klassen des hamster Theaterst cks anzuschauen Dann werden viele Aspekte und Funktionalit ten von Solist unmittelbar klar Das hamster Theaterst ck kann auch als Ausgangspunkt f r eigene Ideen hnlicher MPWs genutzt werden 138 10 3 Theaterst ck kara Das Theaterst ck kara spiegelt eine Abbildung des Java Kara Modells wider siehe http www swisseduc ch informatik karatojava javakara Programmieranf nger m ssen Programme schreiben in denen sie Kara den Marienk fer durch ein Territorium steuern u
18. hne auf dem sich die Komponente gerade befindet 102 oder null falls sich die Komponente aktuell auf keiner B hne befindet return die B hne auf der sich die Komponente gerade befindet muss sich im Unterverzeichnis a public Stage getStage Ordnet der Komponente ein Icon zu durch das sie auf der B hn repr sentiert wird Erlaubt sind Bilder der Formate gif jpg und png param filename x Name der Bilddatei die Datei images des Theaterst ck Verzeichnisses befinden throws IllegalArgumentException wird geworfen wenn die angegebene Datei keine g ltige a lesbare Bilddatei ist 7 public void setlImage String filename throws IllegalArgumentException Ordnet der Komponent in TheaterImage als Icon zu durch das sie auf der B hne repr sentiert wird param image 5 das TheaterImage das als Icon verwendet werden soll public void setImage TheaterImage image Liefert das Icon der Komponente als Thea zugeordnet wird null geliefert terImage Objekt Wurde kein Icon return das Icon der Komponente als Thea public TheaterImage getImage Mit Hilfe der add Methode der Klasse Sta terImage Objekt ge kann eine Komponente auf einer B hne platziert werden Nach der erfolgr B hne diese Methode addedToStage f r die ichen Platzierung wird von der Komponente aufgerufen Als
19. public void fill Zeichnet im TheaterImag in gef lltes Rechteck in der aktuellen Zeichenfarbe param x A x Koordinate der linken oberen Ecke des Rechtecks param y X y Koordinate der linken oberen Ecke des Rechtecks param width x Breite des Rechtecks in Pixeln param height X H he des Rechtecks in Pixeln Xf public void fillRect int x int y int width int height Zeichnet im TheaterImag in gef lltes Oval in der aktuellen Zeichenfarbe param x 4 x Koordinate der linken oberen Ecke des Ovals param y y Koordinate der linken oberen Ecke des Ovals param width x Breite des Ovals in Pixeln param height H he des Ovals in Pixeln public void fillOval int x int y int width int height Zeichnet im TheaterImag in gef lltes Polygon in der aktuellen Zeichenfarbe Es wird automatisch ein Linie hinzugef gt die das Polygon schlie t param xPoints x Koordinaten der Linien param yPoints ie y Koordinaten der Linien 119 param nPoints Anzahl der Liniensegment 87 public void fillPolygon int xPoints int yPoints int nPoints L scht ein TheaterImag public void clear Setzt ein bestimmtes Pixel des TheaterlImages auf eine bestimmte Farb param x x Koordinate des Pixels param y y Koordinate des Pixels param color neue Farbe des Pixels HH HH HH HRHH public void setColorAt int x int y java a
20. xy public Actor getSolist Platziert eine neue Komponente auf der B hne Angegeben werden die Spalt und Reihe der Zelle auf der die Komponente platziert werden soll Unter Platzierung ist dabei zu verstehen dass der Mittelpunkt des Icons das die Komponente repr sentiert auf den Mittelpunkt der Zelle gesetzt wird Da das Koordinatensystem der B hne nicht begrenzt ist kann eine Komponente auch au erhalb der B hne platziert werden Wenn die Komponente bereits auf der B hne platziert ist passiert nichts lt p gt lt p gt Seiteneffekt Nach erfolgreicher Platzierung der Komponente auf der B hn wird die Methode addedToStage der Komponente mit dem entsprechenden Stage Objekt als Parameter aufgerufen lt p gt lt p Achtung Jede Komponente darf maximal einer B hne zugeordnet sein Ist bei Aufruf der Methode add die Komponente bereits einer anderen B hn zugeordnet muss sie bei dieser B hne zun chst mittels remov ntfernt werden Ansonsten bleibt der Aufruf von add wirkungslos param comp die Komponente die auf der B hne platziert werden soll darf nicht null sein param col die Spalte in der die Komponente platziert werden soll param row die Reihe in der die Komponente platziert werden soll HH HFO3H3 H H HUTHO HH HH HH HH HOF HOF HORROR A public void add Prop comp int col int row Entfernt eine Komponent
21. 7 10 Scratch PLUS yasni 78 7 1 o KONSO Easo niee a i E E E E E E 82 ZA2n PEU TYBEN 2 Reimann 83 7 12 1 Imperative PLUS 1 2 ee 83 7 12 2 Objektbasierte Pl Fa ee een 84 Tipps und Tricks nee ea 87 8 1 addedlootage sie EERE RR re 87 8 2 SEILOCAHION reed AEE RARE 87 8 3 ZSYNCHLONISANO m ee 88 8 4 TEINIHELON ee ige 89 9 8 9 Z standsabfragen 2 44u442 ee 90 Referenz Na D e E re 92 IT Sla0 anne re a 92 9 2 Component Aclor Pr psssiasssessisssisHsHi HH 102 9 2 1 GOMponenteren Na Es a 102 92 2 ACODE et ee ee eier 111 9293 PrOD tear nne er el 112 9 3 Performance SBRRENDNENBERNERERRENERENESENEBEBEBEHERENFTENESENBEENEHEFERENENESERENEBENEEEHESEEFEENESERER 112 9 4 Bildarssnse aan esse 116 9 4 1 Theaterlmage uun 4444nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 116 9 4 2 Thealerlcon nee ea ansehen 121 9 5 YELEIANISSEL EEE RER aaa a aa aa a Ea E oe a E ran aa E a aara Eei 122 9 3 1 Keynes een aa i a E i 122 9 5 2 MOUsEINO an pnn n a a a N EE 123 9 6 Kollisionserkennung a neu 127 9 6 1 PReArea nenaon aRRHRabHRRbnbee 127 9 6 2 Rectangle eeerenenaueegaeneneee 128 IB 3 VPON a ee en ee 130 9 6 4 Belle EEE 131 9 6 5 BRlArea ee ee ee 133 9 7 ZAKlIOHSBUNONS AH Renee 135 9 7 1 ActionHandler 2 seele 135 9 2 vGlIEkHandlersarsss a a 135 94 3 NewPropH ndlerz 2 4 136 gI AO a OO A aaa a AAE 136 9817 DesenptioMk aina n e e A e E E A 136 982 M S E a a a Halt 136 10 Bei
22. Ablaufverfolgung ffnen Start Fortsetzen a Niii i Drucken Kopieren J Stopp Geschwindigkeit N Ba NO 8 X D0 2 b ib az p Fa f 4 aa Komplett Compilieren Einf gen zur cksetzen usschneiden ause Wiederher Schrittweise R cksetzen Informationen stellen Ausf hrung i Abb 5 10 Aufbau der Toolbar e Neu Button zum Erzeugen und ffnen eines neuen Theaterst cks Nach dem Anklicken ffnet sich eine Dialogbox in der der Name des neuen Theaterst cks angegeben werden muss Nach Klick auf OK in der Dialogbox ffnet sich ein weiteres Simulatorfenster f r das noch leere neue Theaterst ck Anzumerken ist dass mehrere Theaterst cke gleichzeitig ge ffnet und bearbeitet werden k nnen Einzelne Aktionen Speichern Kompilieren beziehen sich aber nur jeweils auf das entsprechende Theaterst ck e ffnen Button zum ffnen eines bereits existierenden Theaterst cks Nach dem Anklicken ffnet sich eine Dialogbox in der das existierendeTheaterst ck ausgew hlt werden kann Solist Theaterst cke werden dabei durch ein spezielles Symbol eine Theaterpuppe symbolisiert e Compilieren Button zum Compilieren aller Klassen des Theaterst cks Enthalten Klassen syntaktische Fehler wird pro Klasse ein Editorfenster ge ffnet und die Fehler werden dort angezeigt Der Compilierbutton erscheint mit rotem Hintergrund wenn Klassen ge ndert und gespeichert aber noch nicht neu compiliert wurden oder wenn noch nicht beseitigte Compilie
23. Die x Achse w chst nach rechts die y Achse w chst nach unten Prinzipiell ist das Koordinatensystem sowohl in den positiven als auch in den negativen Bereich nicht begrenzt d h wenn von der B hne gesprochen wird ist meistens nur der sichtbare Bereich gemeint Es ist durchaus jedoch auch m glich dass sich Akteure hinter der B hne also im unsichtbaren Bereich der B hne befinden 25 Einer B hne l sst sich ein Bild B hnenbild zuordnen Dieses wird mit seiner linken oberen Ecke in die linke obere Ecke der B hne platziert Ist das B hnenbild kleiner als die B hne wird es entsprechend oft repliziert so dass die B hne immer komplett von dem entsprechenden Bild ausgef llt ist B hnen werden in Solist repr sentiert als Klassen die von der durch Solist vordefinierten Klasse Stage abgeleitet werden Ein Solist Theaterst ck muss immer mindestens eine darf jedoch durchaus auch mehrere B hnen bzw B hnenaufbauten also entsprechende Klassen definieren Welche B hne dann tats chlich beim Start einer Auff hrung genutzt wird kann vor dem Start der Auff hrung bzw vor der Generierung einer PLU durch einen einfachen Mausklick auf die entsprechende Klasse ausgew hlt werden Die ausgew hlte B hne wird als aktive B hne bezeichnet Auch w hrend einer Auff hrung ist ein Wechsel der B hne durch Aufruf einer entsprechenden Methode m glich 4 3 Akteure Solist ist ein Werkzeug des so genannten Programmiertheaters Sch
24. HH RR HR in Objekt der Klase java awt Point darf nicht null sein public Point java awt Point p berpr ft ob der Punkt mit den als Parameter bergebenen Koordinaten gleich dem aufgerufenen Punkt ist param x x Koordinate des Punktes param y y Koordinate des Punktes return genau dann true wenn die beiden Punkte gleich sind HH HH HH HH HRHH s theater PixelArea contains int int 130 public boolean contains int x int y berpr ft ob der aufgerufene Punkt innerhalb der als Parameter bergebenen PixelArea liegt param area die zu vergleichende PixelArea return genau dann true wenn der aufgerufene Punkt innerhalb der als Parameter bergebenen PixelArea liegt HH HH HRROHRH s theater PixelArea isInside theater PixelArea 5 public boolean isInside PixelArea area berpr ft ob der aufgerufene Punkt die als Parameter bergeben PixelArea schneidet d h innerhalb der PixelArea liegt param area die zu vergleichende PixelArea return genau dann true wenn der aufgerufene Punkt innerhalb der als Parameter bergebenen PixelArea liegt HR HH HHH theater PixelArea intersects theater PixelArea oo u public boolean intersects PixelArea area Liefert die x Koordinate des Punktes auf der B hne return die x Koordinate des Punktes auf der B hne bA publ
25. Zustands nderungen mehr sichtbar bevor nicht die Methode unfreeze aufgerufen worden ist public void freeze Bei Aufruf dieser Methode wird der Eingefroren Zustand wieder verlassen Dabei gilt Zu jedem Aufruf von freeze muss es einen Aufruf von unfreeze geben Zus tzliche Aufrufe von unfreeze sind wirkungslos A public void unfreeze Liefert die aktuell dargestellte B hn return die aktuell dargestellte B hn 5 public Stage getActiveStage Setzt eine systeminterne Sperre W hrend die Sperre gesetzt ist sind keine Benutzeraktionen auch kein pause stop wirksam Diese werden erst nach einem anschlie enden Aufruf der Methode unlock ausgef hrt Die Methode sollte genutzt werden um das ndern von internen Attributen und entsprechende Auswirkungen auf die B hne als atomare Aktionen durchzuf hren lt p gt lt p gt Bei der Sperre handelt es sich um einen Reentrant Lock D h es k nnen 115 9 durchaus mehrere lock Aufrufe verschachtelt werden f r jeden lock Aufruf ist jedoch f r eine Entsperrung ein entsprechender unlock Aufruf notwendig 5 public void lock Gibt die mittels der Methode lock gesetzte Sperre wieder frei Ej public void unlock 4 Bilder 9 4 1 Theaterlmage package theater HH S TheaterImage ist eine Theater Klasse mit vielf
26. aller Requisiten Sie ist Unterklasse der Klasse Component und erbt alle deren Methoden lt p gt lt p gt Soll eine neue Requisite definiert werden muss ein ntsprechende Klasse von der Klasse Prop abgeleitet werden Zum Umgang mit den Requisiten k nnen di geerbten Methoden der Klassen Component genutzt werden author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 S public class Prop extends Component implements Serializable Default Konstruktor der Klasse Prop zy public Prop 9 3 Performance package theater Die Klasse Performance definiert Methoden zur Steuerung und Verwaltung der Ausf hrung von Theater Programmen stop suspend setSpeed freeze unfreeze lt p gt lt p gt Weiterhin werden Methoden definiert die unmittelbar nach entsprechenden Steuerungsaktionen aufgerufen werden und zwar auch wenn die Aktionen durch die Steuerungsbuttons des Simulators ausgel st wurden started stopped speedChanged M chte ein Programmierer zus tzliche Aktionen mit den ntsprechenden Steuerungsaktionen einhergehen lassen kann er eine Unterklasse der Klasse Performance definieren und hierin di ntsprechend Methode berschreiben lt p gt lt p gt Zus tzlich stellt die Klasse Performanc ine Methode playSound zur Verf gung mit der eine Audio Datei abgespielt werden kann Die Datei muss sich im Unterverzeichnis sounds
27. anschlie end Aktivieren Sie dann im Klassenbereich oberhalb von Mauer ein Popup Men und w hlen Sie darin das Item new Mauer aus Es heftet sich ein Mauer Ikon an die Maus Wenn Sie dann auf der B hne eine Kachel anklicken wird die Mauer dort abgelegt Wierholen Sie dies bis sich bspw das in Abbildung 7 11 skizzierte Territorium ergibt Auch Mauern k nnen Sie im Territorium per Drag and Drop umplatzieren und auch f r Mauern k nnen Sie ein Popup Men aktivieren und dar ber geerbte Befehle aufrufen ber das Item L schen im Popup Men ist es auch m glich Mauern wieder zu l schen 53 Solist demo Miniwelt Medien Programm B hne Simulation Fenster Hilfe Bla Re a IX all ale gt b void main 0 M int i 0 i lt 10 i willi rechtsUn EI Classes CI Stage E Territorium void rechtsUn willi linksUn willi linksUn o CI Performance j willi linksUn o C Other jomponente wurde auf der B hne platziert Abb 7 11 B hne mit Mauern 7 1 4 Definition einer neuen Performance Klasse Nun wollen wir eine neue Performance Klasse definieren ber die beim Starten eines Solist Programms die Geschwindigkeit immer automatisch auf die Mitte eingestellt wird Dazu aktivieren wir im Klassenbereich auf dem Ordner Performance ein Popup Men w hlen das Item Neue Unterklasse und geben in der erscheinenden Dialogbox den Namen Perf1 ein Nach dem Dr
28. ber die Methode setUserObject bekommen die Komponenten die M glichkeit zu kommunizieren indem sie dem MouseInfo Objekt ein anwendungsspezifisches Objekt zuzuordnen das sp ter benachrichtigte Objekte ber die Methode getUserObject abfragen k nnen param userObject in beliebiges anwendungsspezifisches Objekt lic void setUserObject Object userObject Tritt ein Maus Event ein so werden alle Komponenten und die B hne dar ber informiert insofern das Maus Event oberhalb des ihnen zugeordneten Icons erfolgte si in ntsprechenden Handler Methode definiert und die Maus Event Benachrichtigung aktiviert haben F r die 125 Reihenfolge der Benachrichtigung gilt Je weiter das Objekt auf der B hne im Vordergrund ist desto eher wird es informiert Die B hne wird als letzte informiert Das MouseInfo Objekt das dabei den Methoden bergeben wird ist dabei immer das gleiche ber die Methode setUserObject bekommen die Komponenten die M glichkeit zu kommunizieren indem sie dem MouseInfo Objekt ein anwendungsspezifisches Objekt zuzuordnen das sp ter benachrichtigte Objekte ber die Methode getUserObject abfragen k nnen return das dem MouseInfo Objekt mittels der Methode setUserObject zugeordnete Objekt oder null falls kein Objekt zugeordnet wurd HH HH HHRRHHH Ef public Object getUserObject berschreibt die geerbte Methode und liefert im Fa
29. cken des OK Buttons erscheint im Ordner Performance die Klasse Perf1 Durch Doppelklick ffnen wir den Editor der Klasse Perf1 und geben dort folgendes ein import theater public class Perfl extends Performance public void started setSpeed Performance MAX SPEED Performance MIN SPEED 2 Anschlie end compilieren wir und klicken dann mit der linken Maus auf den Namen Perf1 im Klassenbereich Dadurch sollte das Ikon vor dem Namen rot umrandet werden Das zeigt an dass diese Klasse die nun aktive Performance Klasse ist Wenn Sie nun ein Solist Programm ausf hren wird beim Start immer automatisch die Geschwindigkeit auf die Mitte eingestellt was sie am Geschwindigkeitsregler des Hauptfensters sehen k nnen Theoretisch k nnen Sie auch mehrere Performance Klassen definieren und m ssen dann vor dem Ausf hren von Programmen bzw dem Generieren einer PLU die zu ber cksichtigende Performance Klasse anklicken und damit aktivieren 54 7 1 5 Definition einer neuen Hilfs Klasse Nun wollen wir eine neue Hilfs Klasse definieren in unserem Fall eine Exception Klasse Dazu aktivieren wir im Klassenbereich auf dem Ordner Other ein Popup Men w hlen das Item Neue Unterklasse und geben in der erscheinenden Dialogbox den Namen MauerDaException ein Nach dem Dr cken des OK Buttons erscheint im Ordner Other die Klasse MauerDaException Durch Dopp
30. cks befinden throws IllegalArgumentException wird geworfen wenn die Datei nicht existiert keine g ltige 116 HH HH HH x7 public TheaterImage String filename Gr e HH HH HR HH public TheaterlImage int width Konstruktor zum Bilddatei ist oder nicht lesbar ist param width Breit ines 1 throws IllegalArgumentException iner bestimmten Erzeugen des Bildes in Pixeln param height H he des Bildes in Pixeln Copykonstruktor zum Initialisieren ren TheaterlImages in gt 0 gt 0 int height HH param im xistierenden TheaterImag ines TheaterImages mit in bereits xistierend public TheaterImag TheaterImag im Liefert die Breit s TheaterImag return die Breit s TheaterlImag ER public int getWidth Liefert die H he d TheaterlImages return die H he d TheaterImages BR public int getHeight Ordnet dem TheaterlImag ine Farb fill Methoden di HH HH RK HH param color Zeichenfarb die neu zu ntsprechenden Graphik Primitiv s TheaterlImag s in Pixeln s in Pixeln in Pixeln in Pixeln in der bei public void setColor java awt Color color Liefert die aktuell Zeichenfarbe des 7 inem bereits darf nicht null sein Aufruf der draw bzw retur
31. das entsprechende Item anklicken wird die Methode ausgef hrt Auch hier k nnen Sie die Annotation Invisible einsetzen um eine Methode bzw einen Konstruktor nicht erscheinen zu lassen 7 6 Ausf hren von Solist Programmen Ausgef hrt werden k nnen erfolgreich compilierte Solist Programme mit Hilfe der in Abbildung 7 17 skizzierten Buttons der Toolbar Alle Funktionen sind dar ber hinaus auch ber das Men Simulation aufrufbar Start Stopp Komplett Fortsetzen zur cksetzen s gt I d 4 4 4 Pause R cksetzen Geschwindigkeit Abb 6 17 Simulationsbuttons der Toolbar 7 6 1 Starten eines Solist Programms Bevor ein Solist Programm ausgef hrt werden kann muss es erfolgreich compiliert worden sein Gestartet werden kann das aktuelle Hamster Programm dann durch Anklicken des Start Fortsetzen Buttons 11 Toolbar Button von links Nach dem Starten eines Solist Programms wird der Solist auf der B hne aktiv und tut das was das Programm ihm vorgibt W hrend des Ausf hrens eines Solist Programms wird der Editor Bereich ausgegraut d h es k nnen w hrend der Ausf hrung eines Programms keine nderungen am Sourcecode durchgef hrt werden 65 7 6 2 Stoppen eines Solist Programms Die Ausf hrung eines Solist Programms kann durch Anklicken des Stopp Buttons 14 Button der Toolbar von links jederzeit abgebrochen werden 7 6 3 Pausieren eines Hamster Programms M chten Sie ein in Ausf hrung befindlich
32. die Anderungen werden erst dann ber cksichtigt wenn Sie erneut compiliert haben Erscheint der Button in einer neutralen Farbe ist kein Compilieren notwendig 7 3 1 Compilieren Wenn Sie den Compilieren Button anklicken wird das Programm das gerade im Editor Bereich sichtbar ist in einer internen Datei mit dem Namen Solist java abgespeichert und kompiliert Au erdem werden auch alle anderen Klassen die Sie im Klassenbereich angelegt haben kompiliert Wenn Ihr Programm syntaktisch korrekt ist erscheint nach ein paar Sekunden eine Dialogbox mit einer der Meldung Compilierung erfolgreich Es wurde ein neues ausf hrbares Programm erzeugt 7 3 2 Beseitigen von Fehlern Wenn das Programm des Editor Bereichs oder eine Klasse des Klassenbereichs Fehler enth lt erscheint eine Dialogbox in der alle fehlerhaften Programme bzw Klassen aufgelistet werden Alle Editore von fehlerhaften Klassen werden automatisch ge ffnet In jedem dieser Editore ffnet sich unterhalb des Editor 60 Bereichs in einer Scroll Pane ein neuer Bereich der die Fehlermeldungen des Compilers anzeigt siehe Abbildung 7 14 Jede Fehlermeldung erscheint in einer eigenen Zeile Jede Zeile enth lt eine Beschreibung des wahrscheinlichen Fehlers sowie die entsprechende Zeile der Anweisung im Programm Wenn Sie eine Fehlermeldung anklicken wird die entsprechende Anweisung im Eingabebereich blau markiert und der Maus Cursor an die entsprechend
33. durch die Definition einer von der Klasse Stage abgeleiteten Klass rfolgen Eine B hne besteht dabei aus einem rechteckigen Gebiet das sich aus gleichf rmigen quadratischen Zellen zusammensetzt Die Gr e der B hne wird ber einen Konstruktor durch die Anzahl an Spalten und Reihen sowie die Gr e der Zellen in Pixeln festgelegt Hierdurch wird ein Koordinatensystem definiert das zum Platzieren von Komponenten d h Akteuren und Requisiten auf der B hne dient Das Koordinatensystem ist nicht endlich so dass sich Akteure und Requisiten auch au erhalb der B hne befinden k nnen also zwischenzeitlich nicht sichtbar sind lt p gt lt p gt Neben einer Menge von Getter Methoden zum Abfragen des Zustands einer B hne sowie Methoden zur Verwaltung von Maus und Tastatur Events lassen sich die Methoden der Klasse Stag inteilen in Methoden zur Gestaltung der B hne und Methoden zur Kollisionserkennung lt p gt lt p gt Zu den Gestaltungsmethoden geh ren add und remove Methoden zum Platzieren und Entfernen von Komponenten auf bzw von der B hne Weiterhin existieren Methoden zum Festlegen eines Hintergrundkbildes f r die B hne lt p gt lt p gt Achtung In Solist kann maximal 1 Akteur auf der B hne platziert werden der Solist lt p gt lt p gt ber die Kollisionserkennungsmethoden l sst sich zur Laufzeit u a rmitteln welche Komponenten sich aktuell in bestimmten Bereichen der B hn aufhalte
34. ein beliebiges Gebiet auf der B hne vorstellen Neben einigen zur Verf gung gestellten Standardklassen Point Rectangle Cell CellArea implementieren auch die Klassen Stage und Component das Interface Dadurch sind nur sehr wenige Methoden zur Kollisionserkennung notwendig die jedoch sehr flexibel und umfassend eingesetzt werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 NS public interface PixelArea berpr ft ob der Punkt mit den Koordinaten x und y innerhalb der PixelArea liegt param x x Koordinate des Punktes param y x y Koordinate des Punktes return genau dann true wenn der Punkt mit den Koordinaten x und y x innerhalb der PixelArea liegt public boolean contains int x int y berpr ft ob die aufgerufene PixelArea komplett innerhalb der als Parameter bergebenen PixelArea liegt param area die zu vergleichende PixelArea return genau dann true wenn die aufgerufene PixelArea komplett innerhalb der als Parameter bergebenen PixelArea liegt y public boolean isInside PixelArea area berpr ft ob die aufgerufene PixelArea die als Parameter bergeben PixelArea schneidet param area die zu vergleichende PixelArea return genau dann true wenn die aufgerufene PixelArea die als Parameter bergebene PixelArea schneidet NS pub
35. eingeben in die das aktuelle Territorium gespeichert werden soll Weiterhin ist es m glich die aktuelle B hne als Bild gif oder png Datei abzuspeichern Eine entsprechende Funktion findet sich im B hne Men 7 4 2 Wiederherstellen einer abgespeicherten B hne Abgespeicherte B hnen k nnen mit dem Laden Men Item des B hne Men s wieder geladen werden Es erscheint eine Dateiauswahl Dialogbox in der Sie die zu 62 ladende Datei ausw hlen k nnen Nach dem Anklicken des OK Buttons schlie t sich die Dialogbox und die entsprechende ist wiederhergestellt Achtung Der Zustand der B hne der vor dem Ausf hren der B hne Laden Funktion G ltigkeit hatte geht dabei verloren Speichern Sie ihn daher gegebenenfalls vorher ab Hinweis Das Wiederherstellen von abgespeicherten B hnen ist nur m glich wenn in der Zwischenzeit die Klassen des Klassenbereichs nicht ver ndert worden sind 7 5 Interaktives Ausf hren von Solist Befehlen Sie k nnen einzelne Solist Befehle so werden die von Ihnen in Ihrer Actor Klasse definierten Befehle genannt oder selbst definierte Funktionen und Prozeduren bspw zu Testzwecken auch interaktiv ausf hren Aktivieren Sie dazu im Men Fenster den Eintrag Befehlsfenster Es ffnet sich das so genannte Befehlsfenster siehe Abbildung 7 15 EJ Befehlsfen TER boolean vornFrei void erklimmeEineStufe void erklimmeGipfel void laufeZumBerg void
36. es in der PLU nicht m glich w re bspw ber das Popup Men der Klasse Mauer Mauern zu erzeugen und diese auf der B hne zu platzieren Im Folgenden werden Sie sehen wie es m glich ist so genannte Aktionsbuttons anzulegen die in der Toolbar erscheinen und mit deren Aktivierung bestimmte Funktionalit ten einhergehen Um einen neuen Aktionsbutton anzulegen aktivieren Sie im Men Miniwelt den item Neuer Aktionsbutton Es erscheint eine Dialogbox in der Sie dem Aktionsbutton einen Namen zuordnen und seinen Typ angeben m ssen Der Name muss ein g ltiger Java Bezeichner sein Unterschieden werden 3 Typen ActionHandler NewPropHandler ClickHandler Ein NewPropHandler ist f r das Erzeugen neuer Prop Komponenten geeignet ein ClickHandler f r Klick Aktionen auf Komponenten der B hne und ein ActionHandler f r beliebige andere Aktionen 7 8 1 NewPropHandler Wir wollen nun zun chst einen Button anlegen mit dem es m glich ist Mauern zu erzeugen und auf der B hne zu platzieren Aktivieren Sie dazu bitte im Men Miniwelt das Item Neuer Aktionsbutton und geben Sie in der erscheinenden Dialogbox den Namen NeueMauer an und w hlen Sie den Typ NewPropHandler aus Klicken Sie dann auf den OK Button In der Toolbar erscheint ganz rechts ein neuer Button Dem neuen Button wollen wir nun zun chst ein sinnvolles Ikon zuordnen Aktivieren Sie auf dem Button ein Popup Men und klicken Sie das Item Icon
37. glich 7 2 Verwalten und Editieren von Solist Programmen Nun sind wir auch soweit dass wir komplette Solist Programme schreiben bzw verwalten k nnen Geben Sie bspw das folgende Programm in den Editorbereich des Hauptfensters der so genannte Solist Editor ein Aufgabe Der Hamster steht mit Blickrichtung Osten vor einem Berg mit regelm igen jeweils eine Kachel hohen Stufen Er bekommt die Aufgabe den Berg zu erklimmen und auf dem Gipfel stehen zu bleiben 7 void main laufezZumBerg erklimmeGipfel void laufeZumBerg while vornFrei vor void erklimmeGipfel do rklimmeEineStufe while vornFrei void erklimmeEineStufe linksUm vor rechtsUm vor void rechtsUm kehrt linksUm void kehrt linksUm linksUm Unmittelbar nach der Eingabe des ersten Zeichens erscheint der Compilierbutton in der Toolbar rot Das ist ein Zeichen daf r dass kompiliert werden muss um die Anderungen wirksam werden zu lassen Nach einem Speichern Button suchen Sie umsonst Den gibt es im Solist Simulator nicht Stattdessen wird Ihr Programm wenn Sie auf den Compilier Button dr cken automatisch in einer Datei namens Solist java abgespeichert 57 Compilieren Sie nun Wenn Sie keine Fehler eingetippt haben erscheint eine Dialogbox mit der Meldung Compilierung erfolgreich und die rote F
38. hne Das w hrend einer Auff hrung aktuelle Performance Objekt kann mit Hilfe der statischen Methode getPerformance ermittelt werden Ein Wechsel des Performance Objektes ist w hrend einer Auff hrung nicht m glich 42 6 4 Maus und Tastatur Events Sowohl die Klasse Stage als auch die Klasse Component definieren die von der Java GUI Programmierung bekannten Methoden zur Verarbeitung von Maus und Tastatur Events keyTyped keyPressed keyRealeased mousePressed mouseReleased mouseClicked mouseDragged mouseMoved mouseEntered mouseExited Die Events entsprechen dabei den Events des Java AWT in den Klassen java awt event KeylListener java awt event MouseListener bzw java awt event MouseMotion Listener Zur Dokumentation sei auf die Java AWT Dokumentation verwiesen Den Methoden werden Objekte vom Typ KeyInfo bzw MouseInfo bergeben ber die genauere Informationen ber das entsprechende Event abgefragt werden k nnen Soll der Solist eine Requisite oder eine B hne darauf reagieren wenn w hrend der Programmausf hrung bspw eine bestimmte Taste gedr ckt oder das Icon des Akteurs mit der Maus angeklickt wird kann der Programmierer die Methode in der jeweiligen Klasse entsprechend berschreiben Ob eine Komponente bzw eine B hne berhaupt ber Tastatur und Maus Events informiert werden soll l sst sich ber die Methoden setHandlingKeyEvents bzw setHandlingMouseEvents festlegen und ber die Methoden
39. hne platziert Ist das Bild gr er als die B hne wird rechts und oder unten abgeschnitten Ist das Bild kleiner als die B hne wird es repliziert dargestellt bis die komplette B hne berdeckt ist param image X das TheaterImage das als Hintergrundbild verwendet werden soll NS public final void setBackground TheaterImage image Liefert das Hintergrundbild der B hne als TheaterImage Objekt Wurde kein Hintergrundbild gesetzt wird null geliefert return das Hintergrundbild der B hne als TheaterImage Objekt public TheaterImage getBackground Zeichnet die B hne Normalerweise ist ein Aufruf dieser Methode nicht notwendig da die B hne bei nderungen automatisch aktualisiert wird Wenn allerdings mittels der Methode getAWTImage der Klasse TheaterImag ein java awt image BufferedImage Objekt erfragt und ge ndert wird muss diese Methode aufgerufen werden wenn die nderungen des Imag unmittelbar sichtbar gemacht werden sollen EJ public void paint Liefert eine Liste mit allen Komponenten bestimmter Klassen die aktuell auf der B hne platziert sind Fehlt der Parameter werden all B hnen Komponenten geliefert param classes E Menge von Klassen die bei der Suche ber cksichtigt werden sollen return Liste mit allen B hnen Komponenten bestimmter Klassen R public List lt Component gt getComp
40. innerhalb der sichtbaren B hne return Actor solist getStage getSolist if col solist getColumn amp amp row solist getRow Mauer kann nicht auf die Zelle umplatziert werden auf der sich der Solist befindet return Mauer auf Kachel if this getStage getComponentsAt col row Mauer class size gt 0 eine Mauer kann nicht auf eine Kachel platziert werden auf der sich bereits eine Mauer befindet return ruft die geerbte Methode auf die die tats chliche Umplatzierung vornimmt super setLocation col row 8 3 Synchronisation Die Ausf hrung von Solist Programmen die interaktive Ausf hrung von Solist Befehlen und die Ausf hrung von Aktionen der Aktionsbuttons erfolgen in unterschiedlichen Threads Das kann Probleme mit sich bringen wenn bspw Nutzer w hrend der Ausf hrung bzw Pausierung eines Programms ber das Befehlsfenster Befehle ausf hren oder Aktionsbuttons anklicken Die Aktionen gilt es also zu synchronisieren Zur Synchronisation stehen in der Klasse Performance zwei Methoden lock bzw unlock zur Verf gung Nach Aufruf der Methode lock kann kein 88 weiterer Thread irgendwelche Methoden der Theater API aufrufen und zwar bis wieder die Methode unlock aufgerufen worden ist Der verwendete Lock ist dabei ein Reentrantlock d h wird der Befehl lock n mal aufgerufen muss auch der Befehl unlock n mal aufgerufen werden um die Sperre zu be
41. jedoch nicht mehr wenn Sie in der Zwischenzeit eine Klasse des Klassenbereiches ver ndert haben ber den Komplett Zur cksetzen Button 16 Button der Toolbar von links ist eine komplette Reinitialisierung des Solist Simulators m glich Sollte es irgendwann einmal bei der Benutzung des Simulators zu unerkl rlichen Fehlern k nnen klicken Sie einfach diesen Button an 66 7 7 Debuggen von Solist Programmen Debugger sind Hilfsmittel zum Testen von Programmen Sie erlauben es w hrend der Programmausf hrung den Zustand des Programms zu beobachten und gegebenenfalls sogar interaktiv zu ndern Damit sind Debugger sehr hilfreich wenn es um das Entdecken von Laufzeitfehlern und logischen Programmfehlern geht Der Debugger des Solist Simulators erm glicht w hrend der Ausf hrung eines Solist Programms das Beobachten des Programmzustands Sie k nnen sich w h rend der Ausf hrung eines Solist Programms anzeigen lassen welche Anweisung des Sourcecodes gerade ausgef hrt wird und welche Werte die Variablen aktuell speichern Die interaktive Anderung von Variablenwerten wird aktuell nicht unterst tzt Die Funktionen des Debuggers sind eng mit den Funktionen zur Programmausf hrung verkn pft Sie finden die Funktionen im Men Simulation Es bietet sich jedoch an die entsprechenden Buttons der Toolbar zu verwenden Neben dem Start Fortsetzen dem Pause und dem Stopp Button geh ren die zwei Buttons S
42. ltigen Methoden zum Erzeugen und Manipulieren von Bildern bzw Ikons die dann Akteuren Requisiten oder der B hne zugeordnet werden k nnen Die Bilder lassen sich dabei auch noch zur Laufzeit ver ndern so dass mit Hilfe der Klasse TheaterImage bspw Punktez hler f r kleinere Spiele implementiert werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 public class TheaterImage implements Serializable Konstruktor zur Initialisierung eines TheaterImages mit dem Default Image der entsprechenden Klasse lt ul gt lt li gt Stage B hne mit Vorhang lt li gt lt li gt Actor Marionette lt li gt lt li gt Prop Sessel lt li gt lt li gt Performance Flagge lt li gt lt li gt ansonsten Werkzeuge lt li gt lt ul gt Die Bilder werden im Dateibereich des Theater Simulators benutzt Die Default Images werden auch benutzt wenn eine Actor bzw Prop Klasse ihren Objekten kein igenen Ikons zuordnet param father Klassenobjekt der entsprechenden Klasse Stage class Actor class Prop class Performance class HH e e E E E E a HOF E a E S a a public TheaterImage Class lt gt father Konstruktor zum Initialisieren eines TheaterImage mit einem Bild aus einer Datei Erlaubte Bildformate sind gif jpq und png param filename Name der Bilddatei die Datei muss sich im Unterverzeichnis images des Theaterst
43. mit dem Stoppen eines Theater Programms weitere Aktionen einhergehen muss der Programmierer eine Klasse von der Klasse Performance ableiten und diese Method ntsprechend berschreiben xy public void stopped Diese Methode wird unmittelbar nach dem Anhalten Pausieren eines Theaterst cks aufgerufen lt p gt lt p gt Sollen mit dem Anhalten eines Theater Programms weitere Aktionen einhergehen muss der Programmierer eine Klasse von der Klasse Performance ableiten und diese Method ntsprechend berschreiben rA public void suspended Diese Methode wird unmittelbar nach dem Fortsetzen eines angehaltenen Theaterst cks aufgerufen lt p gt lt p gt Sollen mit dem Fortsetzen eines Theater Programms weitere Aktionen einhergehen muss der Programmierer eine Klasse von der Klasse Performance ableiten und diese Method ntsprechend berschreiben public void resumed Diese Methode wird aufgerufen wenn sich die Geschwindigkeit des Theaterst cks ndert lt p gt lt p gt Sollen mit einer Geschwindigkeits nderung weitere Aktionen einhergehen muss der Programmierer eine Klasse von der Klasse Performance ableiten und diese Method ntsprechend berschreiben param newSpeed die neue Geschwindigkeit 69 public void speedChanged int newSpeed ndert die aktuell eingestellte Ausf hrungsgeschwindigkeit Die minimale Geschwindigkeit kann ber die Konstante MI
44. simulator jar Beim ersten Start sucht Solist nach der JDK Installation auf Ihrem Computer Sollte diese nicht gefunden werden werden Sie aufgefordert den entsprechenden Pfad einzugeben Der Pfad wird anschlie end in der Datei solist properties gespeichert wo er sp ter wieder ge ndert werden kann wenn Sie bspw eine aktuellere JDK Version auf Ihrem Rechner installieren sollten In der Properties Datei k nnen weitere Einstellungen vorgenommen werden Im Ordner data liegen die notwendigen Klassen und Ressourcen Au erdem gibt es einen Unterordner programs der standardm ig beim Abspeichern von Programmen und B hnen genutzt wird Wenn Sie die Datei simulator jar doppelklicken ffent sich die generierte PLU siehe Abbildung 7 23 77 Demo Hamster Simulator Programm B hne Simulation Fenster Hilfe Blt Des xee gt lt Ex le Aufgabe Der Hamster steht mit Blickrichtung Osten vor einem Berg mit regelm igen jeweils eine Kachel hohen Stufen Er bekommt die Aufgabe den Berg zu erklimmen und auf dem Gipfel stehen zu bleiben EEEE 9 void main 10 System out printin hallo laufeZumBerg erklimmeGipfel 15 void laufeZumBerg 16 while vornFrei 17 vor 18 21 void erklimmeGipfel do erklimmeEineStufe while vornFrei 27 void erk
45. stage stage this setDefaultCloseOperation JFrame DISPOSE ON CLOSE this setLayout new BorderLayout JPanel rPanel new JPanel rPanel setLayout new FlowLayout JLabel nR new JLabel Reihen rPanel add nR this reihen new JTextField 15 this reihen setText stage getNumberOfRows this reihen addActionListener new OKButtonAction this rPanel add this reihen this add rPanel BorderLayout NORTH JPanel sPanel new JPanel sPanel setLayout new FlowLayout JLabel nS new JLabel Spalten sPanel add nS this spalten new JTextField 15 t E his spalten setText stage getNumberOfColumns his spalten addActionListener new OKButtonAction this 73 sPanel add this spalten this add sPanel BorderLayout CENTER JPanel buttonPanel new JPanel buttonPanel setLayout new FlowLayout FlowLayout CENTER JButton ok new JButton Ok ok addActionListener new OKButtonAction this buttonPanel add ok JButton cancel new JButton Abbrechen cancel addActionListener new CancelButtonAction this buttonPanel add cancel this add buttonPanel BorderLayout SOUTH this pack this setResizable false Dimension d Toolkit getDefaultToolkit getScreenSize this setLocation d width 2 this getWidth 2 d height 2 this getHeight 2 class OKButtonAction imp
46. standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf mouseReleased Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e 108 enth lt Details zum eingetretenen Event public void mouseReleased MouseInfo e HH e E a E a E E HH E e E a E E a HOT E E E a Wird aufgerufen wenn ein mouseClicked Event auf der Komponente eingetreten ist d h eine Maustaste geklickt wurde w hrend sich der Mauszeiger auf dem Icons der Komponente befindet Soll eine Komponente auf mouseClicked Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mouseClicked Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf mouseCli
47. und kara siehe Kapitel 10 2 und 10 3 Scratch PLUs generiert Werfen Sie am besten mal einen Blick in die Benutzungshandb cher des Scratch Hamster und Scratch Kara Simulators um einen Eindruck von Scratch Simulatoren zu bekommen Lassen Sie uns nun mal aus unserer entwickelten Demo Hamster MPW eine Scratch PLU generieren W hlen Sie dazu in der Generieren Dialogbox siehe Abbildung 7 22 eine der beiden Scratch Varianten deutsch oder englisch aus und klicken dann auf den OK Button Wenn Sie dann im erstellten Verzeichnis die Datei simulator jar doppelklicken ffnet sich die in Abbildung 7 25 dargellte Scratch PLU amp Demo Scratch Hamster Simulator Programm B hne Simulation Fenster Hilfe eo a E6 Ex Abb 7 25 Generierte Scratch PLU Scratch Programme setzen sich aus Bl cken zusammen die Befehle bzw Anweisungen repr sentieren Die Bl cke lassen sich per Drag and Drop mit der Maus zusammenstellen Blaue Bl cke Anweisungsbl cke repr sentieren die in der Solist Klasse definierten void Methoden gr ne Bl cke repr sentieren die in der Solist Klasse definierten boolean Methoden Boolescher Ausdruck Bl cke Weiterhin existieren orangene Bl cke Steuerungsbl cke f r die Kontrollstrukuren if Anweisung if else Anweisung while Schleife und do while Schleife Beim Ausf hren des in Abbildung 7 26 dargestellten Scratch Programms
48. und kann damit unmittelbar selbst in die Kollisionserkennung mit einbezogen werden Die Methode contains berpr ft ob ein bestimmter Punkt innerhalb der B hne liegt ber die Methode isInside l sst sich ermitteln ob die B hne vollst ndig innerhalb einer bestimmten PixelArea liegt und die Methode intersects liefert true falls die B hne eine bestimmte PixelArea schneidet 6 1 4 Event Methoden Soll eine B hne auf Maus und Tastatur Events reagieren k nnen entsprechend des genauen Event Typs folgende Methoden berschrieben werden keyTyped keyPressed keyRealeased mousePressed mouseReleased mouseClicked mouseDragged mouseMoved mouseEntered mouseExited Die Events entsprechen dabei den Events des Java AWT in den Klassen java awt event KeylListener java awt event MouseListener bzw java awt event MouseMotionListener Den Methoden werden Objekte vom Typ KeyIn fo bzw MouseInfo bergeben ber die genauere Informationen ber das entsprechende Event abgefragt werden k nnen Ob eine B hne berhaupt ber Tastatur und Maus Events informiert werden soll l sst sich ber die Methoden setHandlingKeyEvents bzw setHandlingMouseEvents festlegen und ber die Methoden isHandlingKeyEvents bzw isHandlingMouseEvents abfragen Standardm ig wird die B hne nicht ber Tastatur und MouseEvents informiert 6 2 Component Actor und Prop Die Klasse Component definiert Methoden zur Verwaltung von Akteuren und Requisiten im
49. unserer Demo MPW w rde der Hamster als Solist bis zur n chsten Mauer laufen und sich dann umdrehen 80 Die generierten Scratch PLUs unterst tzen weiterhin die Definition neuer Prozeduren und boolescher Funktionen Variablen werden allerdings nicht unterst tzt Boolesche Ausdr cke Steuerung falls linksFrei Abb 7 26 Scratch Programm Bei der Generierung von Scratch PLUs sind folgende Einschr nkungen zu beachten e Von jeder in der Solist Klasse definierten Methode mit dem Funktionstyp void also eine Prozedur wird ein Anweisungsblock generiert Die Methode muss als public deklariert sein darf nicht als abstract deklariert sein und darf keine Parameter besitzen Au erdem darf sie nicht als Invisible annotiert sein e Von jeder in der Solist Klasse definierten Methode mit dem Funktionstyp boolean also eine boolesche Funktion wird ein Boolescher Ausdruck Block generiert Die Methode muss als public deklariert sein darf nicht als abstract deklariert sein und darf keine Parameter besitzen Au erdem darf sie nicht als Invisible annotiert sein e Alle anderen Methoden der Solist Klasse werden ignoriert Bez glich unserer Demo MPW bedeutet das dass es in der generierten Scratch PLU die Anweisungsbl cke linksUm umdrehen und vor sowie den Boolescher Ausdrucks Block vornFrei gibt 81 Bei der Genierung k nnen zwei unterschiedliche Varianten ausgew hlt werden deutsch oder englisch Je nach Wahl haben die Standard Bl
50. von links R ckg ngig gemachte Anderungen k nnen Sie mit Hilfe dieses Buttons wieder herstellen 59 Die Funktionalit ten Kopieren und Einf gen funktionieren brigens auch ber einzelne Programme hinaus Es ist sogar m glich mit Hilfe der Betriebssystem Kopieren Funktion Text aus anderen Programmen bspw Microsoft Word zu kopieren und hier einzuf gen Die gerade aufgelisteten Funktionen finden Sie auch im Programm Men Als zus tzliche Funktionalit ten werden dort angeboten e Einr ckung Durch Anklicken des Men Items wird der Einr ck Modus aktiviert bzw deaktiviert Ist der Einr ck Modus aktiviert werden beim Eingeben von Text im Editor Bereich automatisch Einr ckungen an die entsprechende Spalte vorgenommen wenn Sie die Enter Taste dr cken e Schriftgr e Hier ber k nnen Sie die Schriftgr e des Editor Bereichs anpassen 7 3 Compilieren Beim Compilieren werden Programme genauer gesagt der Sourcecode auf ihre syntaktische Korrektheit berpr ft und im Erfolgsfall ausf hrbare Programme erzeugt Zum Compilieren von Programmen dient im Hamster Simulator der Compilieren Button dritter Button der Toolbar von links bzw das Men ltem Compilieren im Programm Men An der Farbe des Compilier Buttons k nnen Sie erkennen ob Compilieren aktuell notwendig ist oder nicht Immer wenn Sie Anderungen im Editor Bereich vorgenommen haben erscheint der Button rot und
51. wenn die aufgerufene CellArea komplett innerhalb der als Parameter bergebenen PixelArea liegt HH HH HOHRO3HRHHH theater PixelArea isInside theater PixelArea oo u public boolean isInside PixelArea area berpr ft ob die aufgerufene CellArea die als Parameter bergeben PixelArea schneidet param area die zu vergleichende PixelArea return genau dann true wenn die aufgerufene CellArea die als Parameter bergebene PixelArea schneidet theater PixelArea fintersects theater PixelArea HH HH HRHH oo u public boolean intersects PixelArea area Liefert die Spalte der linken oberen Ecke der CellArea return die Spalte der linken oberen Ecke der CellArea public int getFromCol Liefert die Reihe der linken oberen Ecke der CellArea return die Reihe der linken oberen Ecke der CellArea public int getFromRow Liefert die Breite d h die Anzahl an Spalten der CellArea return die Anzahl an Spalten der CellArea public int getNumberOfCcols Liefert die H he d h die Anzahl an Reihen der CellArea return die Anzahl an Reihen der CellArea 134 public int getNumberOfRows 9 7 Aktionsbuttons 9 7 1 ActionHandler package theater Klasse f r die Realisierung von Aktionsbuttons author Dietrich Boles Universit t Old
52. wie Sprache und JDK 16 e jalopy license txt Intern wird das Sourcecode Formatierungstool JALOPY verwendet Diese Datei enth lt die Lizenzbedingungen f r JALOPY e solist license txt Die Lizenzbedingungen f r Solist e solist jar Starten Sie den Solist Simulator durch Doppelklick auf diese Datei bzw Eingabe des Befehls java jar solist jar Nehmen Sie bitte keine Umbenennungen an den Dateien und Ordner vor Insbesondere darf die Datei solist jar nicht umbenannt werden 2 4 Hinweis Wenn es Probleme mit dem Doppelklick unter Windows gibt kann es sein dass die Endung jar dem falschen Programm bzw Java Interpreter zugeordnet ist Testen Sie dies indem Sie in einem Eingabeaufforderungsfenster folgendes eingeben und in etwa die folgenden Ergebnisse angezeigt bekommen Eingabe assoc jar Ausgabe jar jarfile Eingabe ftype jarfile Ausgabe jarfile C Program Files Java jre bin javaw exe jar 1 Den Java Interpreter der standardm ig beim Doppelklick auf eine jar Datei aufgerufen werden soll k nnen Sie durch folgende Eingabe in einem Eingabeaufforderungsfenster ndern ftype jarfile pfad javaw exe jar 31 wobei pfad entsprechend Ihrer Java Installation ge ndert werden muss bspw so ftype jarfile C Program Files Java jdk1 6 0 20 bin javaw exe jar 1 3 Erste Schritte Lesen oder berfliegen Sie zumindest zun chst dieses Handbuch um die Grundlagen von Solist zu verstehen Spi
53. zugeordnetes Icon eine bestimmte PixelArea ber hrt oder schneidet Werden keine Klassenobjekte bergeben so werden alle B hnen Komponenten geliefert die die PixelArea ber hren oder schneiden param area i das Gebiet das die Komponenten ber hren oder schneiden sollen darf nicht null sein param classes K Menge von Klassen die bei der Suche ber cksichtigt werden sollen return Liste mit allen B hnen Komponenten bestimmter Klassen die die 5 angegebene PixelArea ber hren oder schneiden NS public List lt Component gt getIntersectingComponents PixelArea area Class lt gt classes berpr ft ob der angegebene Punkt mit den Koordinaten x und y innerhalb der B hne liegt param x x Koordinate des Punktes param y y Koordinate des Punktes return true falls der angegebene Punkt innerhalb der B hne liegt ds theater PixelArea contains int int S public boolean contains int x int y 96 HR HH ROH HHH x pub HH HH ROHR HR pub HH HH HH a S pub Ey berpr ft ob die B hne vollst ndig innerhalb der angegebenen PixelArea liegt param area das Gebiet das berpr ft werden soll darf nicht null sein return true falls die B hne vollst ndig innerhalb der angegebenen PixelArea liegt s theater PixelArea isInside theater PixelArea lic boolean isIn
54. 2 Solist hamster Miniwelt Medien Programm B hne Neu Strg N d ffnen Strg O d Generieren Strg Neuer Aktionsbutton Strg Umschalt A Beenden Strg Q Abb 5 2 Miniwelt Men Das Menu Medien unterst tzt den Import von Bild und Ton Dateien in die Unterordner images bzw sounds des entsprechenden Theaterst cks siehe Abbildung 5 3 Nach der Auswahl des entsprechenden Eintrags erscheint eine Dateiauswahlbox ber die Sie die zu importierende Datei ausw hlen k nnen Alternativ k nnen Sie nat rlich auch auf der Ebene des Betriebssystems die Dateien in die entsprechenden Uhnterordner des Theaterst ckes kopieren Medien Programm B hne Simulatior Bilder importieren _Stra Umschalt B Sounds importieren Stra Umschalt S mainii 11 Abb 5 3 Medien Men Programme lassen sich ber das Men Programm handhaben siehe Abbildung 5 4 Hier ber ist es m glich alle Klassen und das aktuelle Programm des Solist Editors zu compilieren oder das im Solist Editor befindliche Programm in einer Datei zu speichern bzw sp ter wieder zu laden Auch das Drucken des Solist Programms wird unterst tzt Weiterhin finden sich in dem Men Funktionalit ten die den Solist Editor betreffen wie R ckg ngig machen von Aktionen Wiederherstellen von Aktionen Ausschneiden Kopieren und Einf gen Wollen Sie dass beim Editieren 29 automatisch einger ckt wird wenn die Enter Taste gedr
55. Anklicken des ersten Buttons in der Toolbar ein neues Theaterst ck W hlen Sie den Namen demo 7 1 Anlegen und Verwalten von Klassen Das Anlegen und Verwalten von Klassen erfolgt im Klassenbereich siehe Abbildung 7 1 rechts Hier befindet sich ein Elementbaum mit den Ordnern Stage Actor Prop Performance und Other Miniwelt Medien Programm B hne Simulation Fenster Hilfe Bla R a xT e gt ib Abb 7 1 Klassenbereich 46 Nach dem Erzeugen eines neuen Theaterst ckes sind die einzelnen Ordner leer d h es gibt noch keine Klassen 7 1 1 Definition einer neuen Stage Klasse Als erstes werden wir nun eine Stage Klasse erzeugen Aktivieren Sie dazu oberhalb des Ordners Stage ein Popup Men Klick mit der rechten Maustaste Das Men enth lt ein einzelnes Item Neue Unterklasse Aktivieren Sie es und geben Sie in der erscheinenden Dialogbox f r die Klasse einen Namen ein Wir w hlen den Namen Territorium Nach dem Dr cken des OK Buttons erscheint das in Abbildung 7 2 skizzierte Bild Wir haben eine neue Stage Klasse mit Dummy Werten erzeugt Abb 7 2 Neue Stage Klasse Aktivieren Sie nun im Klassenbereich oberhalb des Namens Territorium ein Popup Men W hlen Sie darin das Item Editor ffnen aus alternativ k nnen Sie auch einen Doppelklick auf den Namen Territorium ausf hren Es ffnet sich ein Editor Fenster in dem die mit Dummy Werten
56. Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event wird aufgerufen wenn ein mouseEntered Event auf der Komponente eingetreten ist d h der Mauszeiger auf das Icon der Komponente gezogen wird Soll eine Komponente auf mouseEntered Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mouseEntered Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf mouseEntered Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden
57. Benutzungshandbuch Solist Version 2 1 21 01 2011 Dietrich Boles Universit t Oldenburg Inhaltsverzeichnis 1 EINS 11 1 1 Motivation VARANRENERLUNERERIEBRRAUNAEREREREREETERRRDBEEEEECOHEFEARHEREOEREHRLFESTTERTEERSEUEEHER FORTAN 11 1 1 1 Programmier Miniwelten 2 2 4400044444nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 11 11 2 BESEIMICNES nee ee 12 1 1 3 Entwicklung von Programmierlernumgebungen 444444e gt 13 1 1 4 Einsatz und Nutzen von Solist an ae 13 1 2 Aufbau und Komponenten 14 13 YOralssgruhden seen 14 1 4 nderungen von Version 2 1 gegen ber Version 2 0 uuaunsanenaeaenennenennnenenn 15 1 5 nderungen von Version 2 0 gegen ber Version 1 0 15 1 6 Aufbau des Benutzungshandbuchs 4244444400nnnnnnn nn nnnnnnnnennnnnnnnnn 15 2 Installation cecer enyin nnana eier ieTens 16 2 1 Vora ssetzungeN seseina ennienni aiaee ai Heel 16 2 2 Download Installation und Start 16 239 Ma t ralgf essnee e e aa ae e 16 24 MINWElSiieeiidansasnauiisedaidadaendae asandan dasad aidaa iadaaa d iaaeaie 17 Erste SCHI vereinen ee 18 3 1 ffnen einer existierenden Miniwelt uauseesesesesenesnsnnennnnnnnnnnnnnnnnnnnnnnennnnnn 18 3 2 Schreiben und Ausf hren eines Programms 44444444400nnnnn nenn 20 3 3 Geslaltendes Terrlioriumsin seruseiiiseisenaneasse 20 3 4 ndern des Modells der Mini Programmierwelt uuuuneaaaseesesesenenennnnnenennnnn 21 3 5 Gene
58. Der Hamster dreht sich um 180 Grad um public void umdrehen Performance getPerformance lock try linksUm linksUm finally Performance getPerformance unlock Wenn diese Methode in einem Solist Programm aufgerufen wird und die Geschwindigkeit auf langsam steht k nnen Sie sehen dass sich der Hamster zweimal linksum dreht und nach jedem linksUm Befehl macht er entsprechend der eingestellten Geschwindigkeit eine kleine Pause Das kann durch Verwendung der Methoden freeze und unfreeze der Klasse Performance ge ndert werden Der Aufruf der Methode freeze bewirkt ein Einfrieren des aktuellen Zustands der B hne Erst wenn die Methode unfreeze aufgerufen wird wird die B hne wieder aktualisiert Im eingefrorenen Zustand entfallen dar berhinaus die Pausen bei eingestellter niedriger Geschwindigkeit Description Der Hamster dreht sich um 180 Grad um public void umdrehen Performance getPerformance lock Performance getPerformance freeze try linksUn linksUn finally Performance getPerformance unfreeze Performance getPerformance unlock Wird die Methode freeze mehrmals hintereinander aufgerufen bedarf es brigens genauso vieler unfreeze Aufrufe um den Eingefroren Zustand wieder zu verlassen 8 5 Zustandsabfrage Manchmal ist es notwendig zu wissen ob eine bestimmte Aktion w hrend einer laufenden Simulation stattfindet oder nicht Bspw m cht
59. Die Methoden der Klasse Stage lassen sich in vier Kategorien einteilen e Gestaltungsmethoden Methoden zur Gestaltung der B hne e Getter Methoden Methoden zum Abfragen des Zustandes der B hne e Kollisionserkennungsmethoden Methoden zur Ermittlung bestimmter Komponenten e Event Methoden Methoden zur Reaktion auf Maus und Tastaturevents 37 6 1 1 Gestaltungsmethoden F r das Platzieren von Komponenten auf der B hne existiert eine add Methode Dieser wird neben der Komponente die Spalte und Reihe der Zelle bergeben auf der die Komponente platziert werden soll Platzieren bedeutet dabei dass das der Komponente zugeordnete Icon oberhalb der B hne angezeigt wird und zwar wird der Mittelpunkt des Icons auf den Mittelpunkt der entsprechenden Zelle gesetzt ber eine remove Methode k nnen Komponenten wieder von der B hne entfernt werden Zwei setBackground Methoden erlauben die Zuordnung eines Hintergrundbildes zu einer B hne Das Bild wird dabei in der linken oberen Ecke der B hne platziert Ist es gr er als die B hne wird es rechts und unten abgeschnitten Ist es kleiner als die B hne wird es repliziert dargestellt bis die B hne vollst ndig berdeckt ist Zul ssig sind Bilder im gif jpg und png Format Bilddateien m ssen im Unterverzeichnis images des entsprechenden Theaterst ck Verzeichnisses gespeichert werden Bei jedweder Solist internen nderung der B hne w hrend einer Auff hrung wird unmittelb
60. E E E E a HH HH HOF NH E a E a a param e enth lt Details zum eingetretenen Event EJ public void keyReleased KeyInfo e Legt fest ob die B hne Maus Ereignisse behandeln soll Standardm ig ist dies in Solist nicht der Fall param handlingMouseEvents true falls die B hne Maus Ereignisse behandeln soll false andernfalls HR RR RR Hr S 98 public void setHandlingMouseEvents boolean handlingMouseEvents berpr ft ob die B hne Maus Ereignisse behandelt Standardm ig ist dies in Solist nicht der Fall return true falls die B hne Maus Ereignisse behandelt public boolean isHandlingMouseEvents HH a e e E e oe HH e oae THF THF THF HORROR 7 Wird aufgerufen wenn ein mousePressed Event auf der B hn ingetreten ist d h eine Maustaste gedr ckt wird w hrend sich der Mauszeiger oberhalb der B hne befindet Soll eine B hne auf mousePressed Events reagieren muss sie diese Method ntsprechend berschreiben Genauer Informationen zu mousePressed Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl d
61. Entwicklung weitere PLUs f r die Kara Modellwelt und die Schildkr tengraphik siehe die Beispiele in Kapitel 10 gekostet Vielleicht fragen Sie sich nun Es gibt doch bereits eine Reihe von Mini Programmierwelten mit dazugeh rigen Programmierlernumgebungen Wof r werden denn berhaupt noch weitere ben tigt Antwort e Als Entwickler des Hamster Modell und des Hamster Simulators bekomme ich oft Emails von Lehrern die fragen ob es nicht m glich ist bestimmte Eigenschaften des Modells bzw Simulators ndern zu k nnen Einige wollen den Befehl 13 rechtsUm als weiteren Grundbefehl andere wollen englischsprachige Befehle andere wollen die Icons austauschen andere wollen den Hamster gegen einen anderen Akteur umtauschen usw Durch Einsatz von Solist k nnen derartige nderungsw nsche an existierenden PLUs innerhalb kurzer Zeit problemlos selber durchgef hrt werden e Nach geraumer Zeit wird es ungeduldigen Programmieranf ngern oft langweilig immer nur Programme derselben MPW schreiben zu m ssen Nat rlich w re es f r Lehrer m glich bspw nach einiger Zeit vom Hamster Modell zu Kara zu wechseln Allerdings bedarf das doch einer Umgew hnung der Programmieranf nger was die Handhabung der dazu geh rigen PLU betriftt Mit Solist erstellte PLUs sind jedoch in ihrer Bedienung gleichartig so dass ein solcher Wechsel problemlos m glich ist e Solist erlaubt nicht nur die Nach Implementierung von PLUs f r MPWs die einen
62. Folgenden zusammengefasst als Komponenten bezeichnet die sie an die von ihr abgeleiteten Klassen Actor und Prop vererbt Die Klassen Actor und Prop unterscheiden sich nur dadurch dass von Actor abgeleitete Klassen eine Methode namens main berschreiben k nnen die die Aktionen des Solisten definiert Die Methoden der Klasse Component lassen sich in vier Kategorien einteilen e Manipulationsmethoden Methoden zur Ver nderung von Komponenten e Getter Methoden Methoden zum Abfragen des Zustandes von Komponenten e Kollisionserkennungsmethoden Methoden zur Ermittlung bestimmter Komponenten e Event Methoden Methoden zur Reaktion auf Maus und Tastaturevents 39 6 2 1 Manipulationsmethoden Mit Hilfe zweier set Image Methoden ist es m glich einer Komponente ein Bild oder Icon zuzuordnen ber das sie auf der B hne repr sentiert wird Zul ssig sind Bilder im gif jpg und png Format Bilddateien m ssen im Unterverzeichnis images des entsprechenden Theaterst ck Verzeichnisses gespeichert werden Die Methode setLocation erlaubt das Umplatzieren einer Komponente auf der B hne Angegeben werden die neue Spalte und Reihe Das ndern der z Koordinate ist ber die Methode setZCoordinate m glich Die z Koordinate bestimmt die Zeichenreihenfolge und damit u U Sichtbarkeit von Komponenten Es gilt Je h her die z Koordinate einer Komponente ist desto sp ter wird sie gezeichnet d h umso weiter gelangt sie in den Vordergrun
63. IDE zum einfachen Entwickeln von Programmierlernumgebungen Mit Hilfe graphisch interaktiver Hilfsmittel k nnen erfahrenere Programmierer auf der Grundlage einer bersichtlichen Programmier API so genannte Mini Programmierwelten definieren daraus Programmierlern umgebungen generieren und diese dann Programmieranf ngern zur Verf gung stellen 1 1 Motivation Heftig diskutiert wird immer wieder die Frage ob die Programmierung noch zur Informatik Grundausbildung geh ren soll F r fast alles gibt es heutzutage bereits fertige Computer Anwendungen Reicht es nicht aus den Umgang mit diesen zu erlernen als zu wissen wie sie intern funktionieren Probleme einer solchen anwendungsorientierten Einf hrung in die Informatik sind die Kurzlebigkeit heutiger Anwendungen und die entstehende Abh ngigkeit von den Produkten bzw Anbietern Gefragt ist daher eher Konzeptwissen wie funktionieren Softwaresysteme wie werden sie erstellt das letztendlich den Transfer auf konkrete Anwendungen erlaubt 1 1 1 Programmier Miniwelten Das Erlernen von Programmiersprachen und die Entwicklung von Programmen sind allerdings nicht trivial Sicher gibt es Sch ler die sehr schnell damit zurechtkommen Viele haben aber Probleme mit der Komplexit t der Thematik und sind schnell frustriert F r einen einfachen Einstieg in die komplexe Welt der Programmierung wurden daher bereits in den 70er Jahren des vergangenen Jahrhunderts so genannte Mini Programmierwelten
64. Methoden u 4444444444nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 41 625 Bolsa ee a 41 6 3 Performance ERMEENTRENBEENEREERENERERETENSPENEEEHERENERENESENEEENEBENERENERENFEENESEREEENHENFEENESENEHRER 42 6 4 Maus und Tastatur Events uuuuusssssnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnn 43 6 4 1 lt 1 11 ANIRERBUBDRIEDECNEHNEPENERBDEFENPUENETENEERUELEGBUENELENEUESELESERENELEHEUESCLESSTENELENEUERELENG 43 6 4 2 IMOUSEINIO see ee ae ee en a een 44 6 5 Theaterlmage und Theaterlcon 2222444400000444nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 44 6 6 Kollisionserkennung ax aa 45 7 Entwicklungsfunktionalit ten im Detail 44u0ssnnnnnnnnnnnnnnnnnnnnnnnnen 46 7 1 Anlegen und Verwalten von Klassen suus44444444nnnnnnnnnnnnnnnnnnnnnn 46 7 1 1 Definition einer neuen Stage Klasse uuuusssnnensseennnnnnnnnnnnnnnn en 47 7 1 2 Definition einer neuen Actor Klasse uuuussnnnnnnnennnnnnnnnnnnnnnn en 49 7 1 3 Definition einer neuen Prop Klasse uuuums44222nnnnnnnnnnnnnnnnnnnn 52 7 1 4 Definition einer neuen Performance Klasse 444444nennnn nn 54 7 1 5 Definition einer neuen Hilfs Klasse uuu44442244444nnnnnnnnnnnnnnn 55 7 1 6 Erweitern der Klasse Hamster 44444444400nnnnn nen nnnnnnnnnnnnnnnnn nn 55 7 1 7 RIASSEMIOSCHeN A A aeg 56 7 2 Verwalten und Editi
65. N SPEED die maximale Geschwindigkeit ber die Konstante MAX SPEED abgefragt werden Wird als gew nschte Geschwindigkeit ein kleinerer bzw gr erer Wert als die entsprechende Konstante bergeben wird die Geschwindigkeit automatisch 114 auf MIN SPEED bzw MAX SP lt p gt F lt p gt Die Methode kann aus einem Programm heraus aufgerufen werden Sie wird auch aufgerufen wenn der Nutzer im Theater Simulator den Geschwindigkeitsregler benutzt T ED gesetzt param newSpeed die neue Ausf hrungsgeschwindigkeit die zwischen MIN SPEED und MAX SPEED liegen sollte HH ROHR HH HH HH public void setSpeed int newSpeed Liefert die aktuelle Ausf hrungsgeschwindigkeit der Performance return die aktuelle Ausf hrungsgeschwindigkeit der Performance u public int getSpeed Spielt einen Sound ab der aus einer Datei geladen wird Erlaubt sind die Formate au aiff und wav param soundFile Name der Sounddatei die Datei muss sich im Unterverzeichnis X sounds des Theaterst ck Verzeichnisses befinden throws IllegalArgumentException wird geworfen wenn die angegebene Datei keine g ltige amp lesbare Sounddatei ist public void playSound String soundFile throws IllegalArgumentException Der Aufruf dieser Methode f hrt dazu dass die Ansicht der B hne eingeforen wird d h s werden keinerlei
66. Parameter wird dabei das B hnenobjekt b Komponente bestimmte Aktionen ausgef hrt rgeben Sollen f r eine werden sobald sie einer B hne chend berschrieben werden zugeordnet wird muss die Method ntspr param stage das Objekt das die B hne rep r sentiert auf die die HH HH HH HHHH Komponente platziert wurde public void addedToStage Stage stage Mit Hilfe der remove Methode der Klass Stage kann eine Komponente von iner B hn ntfernt werden Nach der er der B hne diese Methode removedFromStage Als Parameter wird dabei das B hnenobjek folgreichen Entfernung wird von f r die Komponente aufgerufen Komponente bestimmte Aktionen ausgef hrt B hne entfernt wird muss die Method n t bergeben Sollen f r eine werden sobald sie von einer param stage tsprechend berschrieben werden das Objekt das die B hne rep Komponente entfernt wurde HH HORROR NS public void removedFromStage Stage stage 103 r sentiert von der die HH HH e E E a a E E a Mit Hilfe der add Methode der Klasse Stage k nnen Komponente in einer bestimmten Spalte und Reihe auf der B hne platziert werden Die Method setLocation erm glicht die Umplatzierung der Komponente auf der B hn param newCol die Spalte in die die Komponente umplatziert werden soll param newRow die Reihe in die die Komponente umplatziert werden soll
67. Sie dort folgende Anweisung ein stage remove clickedComponents Speichern Sie dann ab kompilieren Sie und platzieren Sie zun chst einige Mauern im Territorium Klicken Sie den neuen Aktionsbutton dann an Sie aktivieren damit seine Funktionalit t was durch einen dunkelgrauen Hintergrund angezeigt wird Solange der Aktionsbutton aktiviert ist k nnen Sie nun einzelne Kacheln des Territoriums anklicken Befinden sich auf einer angeklickten Kachel ein oder mehrere Mauern werden diese gel scht Deaktivieren k nnen Sie den Button dadurch dass Sie ihn erneut anklicken Er wird automatisch auch dann aktiviert wenn ein anderer Aktionsbutton angeklickt wird Was letztendlich passiert ist folgendes Solange ein Akionsbutton vom Typ ClickHandler aktiviert ist wird jedesmal wenn der Benutzer auf die B hne klickt dessen Methode handleClick aufgerufen U bergeben werden dabei die aktuelle B hne stage der aktuelle Solist solist die Spalte col und Reihe row der angeklickten Zelle sowie eine Liste mit allen Komponenten k die auf der Zelle platziert sind f r die also gilt k getRow row amp amp k getColumn column In unserem Beispiel werden alle diese Komponenten von der B hne entfernt 7 8 3 ActionHandler Als n chstes legen wir einen neuen Aktionsbutton vom Typ ActionHandler an Mit diesem wollen wir erreichen dass der Benutzer die Gr e des Territoriums ndern kann Aktivieren Sie dazu bitte im Men Min
68. age BufferedImage realisiert Das entsprechende Objekt kann ber die Methode getAWTImage abgefragt und direkt angesprochen werden TheaterIcon ist eine von der Klasse Theaterlmage abgeleitete Klasse f r die Verwendung von Animated GIF Bildern Theaterlcon Objekte k nnen jedoch nicht manipuliert werden Die entsprechenden Methoden sind jeweils leer berschrieben 6 6 Kollisionserkennung PixelArea ist ein Interface das die Grundlage der Kollisionserkennungsmethoden darstellt Eine PixelArea kann man sich dabei als ein beliebiges Gebiet auf der B hne vorstellen Das Interface PixelArea definiert genau drei Methoden Die Methode contains berpr ft ob ein angegebener Punkt innerhalb der PixelArea liegt Die Methode isInside berpr ft ob die aufgerufene PixelArea komplett innerhalb einer anderen PixelArea liegt und die Methode intersects berpr ft ob die aufgerufene PixelArea eine andere PixelArea schneidet Threadnocchio stellt vier Standardklassen zur Verf gung die das Interface PixelArea implementieren Point Rectangle Cell und CellArea Mit Hilfe der Klasse Point und Rectangle k nnen Kollisionen von Punkten bzw rechteckigen Gebieten mit anderen Bereichen der B hne berpr ft werden Objekte der Klassen Cell bzw CellArea repr sentieren einzelne Zellen bzw rechteckige Gebiete von Zellen der B hne die somit auch auf Kollisionen berpr ft werden k nnen Die Klassen Stage und Component implementieren ebenfalls das Inte
69. allgemeinen Einstieg in die Programmierung erleichtern Mit Hilfe von Solist k nnen auch wesentlich speziellere MPWs umgesetzt werden In Kapitel 10 wird dies an mehreren Beispielen demonstriert Es wird bspw eine PLU vorgestellt die das Verst ndnis von Programmieranf ngern f r die Rekursion anhand des Problems T rme von Hanoi f rdern soll 1 2 Aufbau und Komponenten Solist ist ein Werkzeug aus der Familie des so genannten Programmiertheaters Neben Solist besteht dieses aktuell aus zwei weiteren Werkzeugen e Objekt Theater Ein Werkzeug zum Erlernen der objektorientierten Programmierung durch das Entwicklen kleiner Spiele und Simulationen e Threadnocchio Ein Werkzeug zum Erlernen der parallelen Programmierung mit Java Threads Solist besteht dabei aus zwei Komponenten e einer graphisch interaktiien Entwicklungsumgebung dem so genannten Solist Simulator e und einer vordefinierten Klassenbibliothek der Theater Klassenbibliothek oder Theater APlI Die API ist bei allen Werkzeugen des Programmiertheaters nahezu identisch 1 3 Voraussetzungen Zielgruppe von Solist sind bspw Informatik Lehrer die Programmierlernumgebungen f r selbst ausgedachte Mini Programmierwelten implementieren und ihren Sch lern zur Verf gung stellen wollen Voraussetzung zur Benutzung von Solist ist die Beherrschung der Basissprachkonzepte von Java Klassen Objekte Attribute Methoden Anweisungen Variablen Schleifen Nicht notwendi
70. alls true wird die Komponente sichtbar falls false wird x sie unsichtbar NS public void setVisible boolean visible Liefert die Sichtbarkeit der Komponente return true falls die Komponente sichtbar ist ansonsten false bA public boolean isVisible berpr ft ob der angegebene Punkt mit den Koordinaten x und y innerhalb des Icons der Komponente liegt param x x Koordinate des Punktes param y y Koordinate des Punktes return true falls der angegebene Punkt innerhalb des Icons der Komponente liegt e throws IllegalStateException wird geworfen wenn die Komponente aktuell nicht auf der B hne platziert ist s theater PixelArea contains int int HR E E E e a E E E a a E EE E HR S public boolean contains int x int y throws IllegalStateException 105 berpr ft ob das Icon der Komponente vollst ndig innerhalb der angegebenen PixelArea liegt param area das Gebiet das berpr ft werden soll darf nicht null sein return true falls das Icon der Komponente vollst ndig innerhalb der angegebenen PixelArea liegt throws IllegalStateException wird geworfen wenn die Komponente aktuell nicht auf der B hne platziert ist s theater PixelArea isInside theater PixelArea public boolean isInside PixelArea area throws IllegalStateException berpr ft o
71. ame der Funktion und die aktuelle Position der Ausf hrung der Funktion Ganz unten erscheint die aktuell aktive Funktion dar ber gegebenenfalls die Funktion die diese Funktion aufgerufen hat usw Ganz oben steht also immer die main Funktion Im rechten Bereich des Debugger Fensters werden die aktiven Variablen und ihre aktuellen Werte angezeigt Die Darstellung erfolgt dabei in einem Elementbaum d h bei komplexen Variablen wie Arrays k nnen Sie durch Anklicken des Symbols vor dem Variablennamen die Komponenten einsehen Auch w hrend die Ablaufverfolgung aktiviert ist k nnen Sie die Programmausf hrung durch Anklicken des Pause Buttons anhalten und durch anschlie endes Anklicken des Start Fortsetzen Buttons wieder fortfahren lassen Auch die Geschwindigkeit der Programmausf hrung l sst sich mit dem Schieberegler anpassen 7 7 2 Schrittweise Programmausf hrung Mit dem Toolbar Button Schrittweise Ausf hrung 12 Button der Toolbar von links ist es m glich ein Programm schrittweise d h Anweisung f r Anweisung auszuf hren Immer wenn Sie den Button anklicken wird die n chste Anweisung bzw Zeile ausgef hrt Sie k nnen das Programm mit der schrittweisen Ausf hrung starten Sie k nnen jedoch auch zun chst das Programm normal starten dann pausieren und ab der aktuellen Anweisung schrittweise ausf hren Eine normale Programmweiterf hrung ist jederzeit durch Klicken des Start Buttons m glich
72. ar automatisch die ge nderte B hne im Solist Simulator neu gezeichnet F r nderungen auf die Solist selbst keinen Einfluss hat bspw nderungen des AWT Images eines Theaterlmages steht die Methode paint zur Verf gung hat die die B hne explizit neu zeichnet 6 1 2 Getter Methoden ber die Getter Methoden kann der Zustand der B hne abgefragt wird Dies beinhaltet die Anzahl an Spalten der B hne die Anzahl an Reihen die Gr e der Zellen und das zugeordnete Hintergrundbild 6 1 3 Kollisionserkennungsmethoden ber die Kollisionserkennungsmethoden l sst sich zur Laufzeit u a ermitteln welche Komponenten sich aktuell in bestimmten Bereichen der B hne aufhalten oder welche Komponenten genauer gesagt deren Icons sich ber hren oder berlappen ber eine Methode getComponents k nnen alle Komponenten ermittelt werden die sich aktuell auf der B hne befinden Die Methode getComponentsAt schr nkt die Abfrage auf eine bestimmte Zelle ein Die Methode getComponentsInside liefert alle Komponenten innerhalb einer bestimmten PixelArea und die Methode getIntersectingComponents liefert alle Komponenten die eine bestimmte PixelArea ber hren oder schneiden Allen Kollisionserkennungsmethoden kann optional eine Menge von Klassenobjekten bergeben werden In diesem Fall werden nur Objekte der entsprechenden Klassen bei der Kollisionserkennung ber cksichtigt 38 Die Klasse Stage implementiert brigens das Interface PixelArea
73. ar kann der Sourcecode bearbeitet werden Nach dem Compilieren erfolgt immer zentral im Hauptfenster erscheinen Compilierfehler im Compilierfehlerbereich Im Meldungsbereich ganz unten im Editorfenster werden Hinweise und Benutzungsfehler angezeigt Interessant ist die Funktion Formatieren im Men Format Hiermit l sst sich der Sourcecode automatisch gem der Java Codekonventionen formatieren Eingesetzt wird hierbei das Tool JALOPY Toolbar Programmbereich Zeile Compilierfehlerbereich Meldungsbereich Abb 5 11 Aufbau des Editors 35 Speichern Strg S Drucken Strg P Schlie en Stra W m Abb 5 12 Datei Men mo Hamster java R ckg ngig Strg Z Wiederherstellen Strg Y Ausschneiden Kopieren Einf gen WM Einr ckung Strg Umschalt E E Formatieren Strg UmschaltF O 10 ass Hamster extends Actor ted Solist willi ted int blickrichtung ault Konstruktor muss imp Hanster mper nicht loeschen Abb 5 14 Format Men 36 6 Theater API Die Theater API oder Klassenbibliothek besteht aus einer Menge von Klassen und Interfaces auf deren Grundlage Solist Theaterst cke entwickelt werden k nnen Stage Basisklasse zur Definition einer B hne Component Oberklasse der Klassen Actor und Stage Actor Basisklasse zur Definition eines Akteurs Prop Basisklasse zur Definition einer Requisite Performance Basiskla
74. aste abgeschlossen hat Die folgende Funktion readInt 82 erwartet bspw vom Nutzer die Eingabe einer Zahl in der Konsole und liefert den entsprechenden Wert an das Hamster Programm Wenn der Nutzer in der Konsole den Wert 4 eingibt h pft der Hamster vier Kacheln nach vorne insofern er nicht gegen eine Mauer rennt void main System out println Zahl eingeben int zahl readInt while zahl gt 0 vor zahl zahl 1 Einlesen eines int Wertes int readInt try java io BufferedReader input new java io BufferedReader new java io InputStreamReader System in String eingabe input readline return new Integer eingabe catch Throwable exc return 0 Die Konsole enth lt in der Men leiste ein Men namens Optionen Hierin finden sich drei Men ltems ber die es m glich ist den aktuellen Inhalt der Konsole zu l schen den aktuellen Inhalt der Konsole in einer Datei abzuspeichern bzw die Konsole zu schlie en 7 12PLU Typen Die Solist bzw den generierten PLUs zugrunde liegende Programmiersprache ist Java Um den Programmieranf nger die die PLUs benutzen sollen das Leben etwas leichter zu machen gibt es jedoch leichte Unterschiede Unterschieden werden in Solist generell zwei verschiedene Typen von PLUs Imperative PLUs und objektbasierte PLUs Die Typauswahl erfolgt ber das Men Programm im untersten Item Standardm ig ist der Typ impera
75. auch die B hne k nnen auf keyTyped Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event Ej public void keyPressed KeyInfo e EE SNE a e a E a a a HH E a E E a a E E E E a E a Wird aufgerufen wenn w hrend die B hne den Focus besitzt ein keyReleased Event eingetreten ist Soll eine Komponente auf keyReleased Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu keyReleased Events finden sich in der Klasse java awt event KeyListener bergeben wird der Methode ein KeyInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingKeyEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf keyTyped Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachr
76. auf der B hne bewegen also umplatzieren oder bspw rotieren zu k nnen Weiterhin ist eine Menge von um zum einen ihren Zustand abfragen und zum anderen das B hnen Objekt lt p gt lt p gt PixelArea so dass Akteur rmitteln zu k nnen dem sie u U zugeordnet sind Wie die Klasse Stag nth lt die Klasse Component dar ber hinaus Kollisionserkennungsmethoden zum Entdecken von Kollisionen der entsprechenden Komponente mit anderen Komponenten sowi und Tastatur Events Die Klasse Component implementiert das Interface Methoden zur Verwaltung von Maus und Requisiten unmittelbar selbst in die Kollisionserkennung mit version 1 0 03 11 2009 FH HH HOHOH3H3 HOHTOITHOHOHO 3HOHO HOFFT HH HH HH NS inbezogen werden k nnen author Dietrich Boles Universit t Oldenburg Germany public class Component extends Object implements PixelArea Serializable Standardm iger Wert der Z Koordinate public final static int DEF Z COORDINAT zal als Aktuer oder Requisit true falss es sich um einen Akteur handelt false falls es Konstruktor der eine neue Komponente initialisiert param isActor ES sich um eine Requisite handelt NS protected Component boolean isActor Copy Konstruktor param comp u die zu klonende Komponente Er public Component Component comp Liefert das Objekt der B
77. auspieler die auf der B hne agieren werden hier als Akteure Actor bezeichnet Akteure sind dabei Objekte von Klassen die von der vordefinierten Klasse Actor abgeleitet sind In Solist gibt es dabei immer genau einen Akteur der so genannte Solist daher hat das Werkzeug auch seinen Namen Es kann jedoch durchaus mehrere von der Klasse Actor abgeleitete Actor Klassen geben Wie bei den B hnen auch wird die aktive Actor Klasse vor der Programmausf hrung bzw vor der PLU Generierung durch einen einfachen Mausklick auf die entsprechende Klasse ausgew hlt werden Dem Solist kann ein Ikon zugeordnet werden durch das er auf der B hne repr sentiert wird Die Platzierung des Solisten auf der B hne erfolgt durch Angabe der entsprechenden Zelle bzw deren Spalte und Reihe Optisch wird der Mittelpunkt des Ikons dabei auf den Mittelpunkt der Zelle gesetzt Der Solist muss durch entsprechende Anweisungen im Konstruktor der aktiven Stage Klasse erzeugt und initial auf der B hne platziert werden Die wichtigsten Aktionen die der Solist ausf hren kann sind Aktionen zum Bewegen auf der B hne zum Zuordnen von neuen Ikons oder auch Rotationen Dar ber hinaus k nnen Kollisionen mit Gegenst nden auf der B hne berpr ft werden Eine interaktive Beeinflussung des Solisten durch den Benutzer ist durch die Definition entsprechender Tastatur bzw Maus Event Handler m glich Im Hamster Theaterst ck ist der Hamster der Solist 4 4 Requisiten
78. b das Icon der Komponent ine angegebene PixelArea schneidet param area K das Gebiet das berpr ft werden soll darf nicht null sein return true falls das Icon der Komponente die angegebenen PixelArea schneidet throws IllegalStateException u wird geworfen wenn die Komponente aktuell nicht auf der B hne platziert ist s theater PixelArea intersects theater PixelArea y public boolean intersects PixelArea area throws IllegalStateException Legt fest ob die Komponente Tastatur Ereignisse behandeln soll Standardm ig ist dies in Solist nicht der Fall param handlingKeyEvents true falls die Komponente Tastatur Ereignisse behandeln soll x false andernfalls S public void setHandlingKeyEvents boolean handlingKeyEvents berpr ft ob die Komponente Tastatur Ereignisse behandelt Standardm ig ist dies in Sloist nicht der Fall z return true falls die Komponente Tastatur Ereignisse behandelt Ef public boolean isHandlingKeyEvents Wird aufgerufen wenn w hrend die B hne den Focus besitzt ein keyTyped Event eingetreten ist Soll eine Komponente auf keyTyped Events reagieren muss sie dies thod ntsprechend berschreiben Genauer Informationen zu keyTyped Events finden sich in der Klasse java awt event KeyListener bergeben wird der Methode ein KeyInfo Objekt ber das Details
79. c void setSize int noOfCols int noOfRows ndert die Gr e der B hn param noOfCols Anzahl an Spalten param noOfRows 5 Anzahl an Reihen param cellSize Gr e jeder Zelle 8 public void setSize int noOfCols int noOfRows int cellSize Platziert den Solist auf der B hn Befindet sich bereits ein anderer Solist auf der B hne wird dieser entfernt lt p gt lt p gt Angegeben werden die Spalte und Reihe der Zelle auf der der Solist platziert werden soll Unter Platzierung ist dabei zu verstehen dass der Mittelpunkt des Icons das den Solist repr sentiert auf den Mittelpunkt der Zelle gesetzt wird Da das Koordinatensystem der B hne nicht begrenzt ist kann der Solist auch au erhalb der B hne platziert werden Wenn der Solist bereits auf der B hne platziert ist passiert nichts lt p gt lt p gt Seiteneffekt Nach erfolgreicher Platzierung des Solist auf der B hne wird dessen Methode addedToStage mit dem entsprechenden Stage Objekt als Parameter aufgerufen lt p gt 93 lt p Achtung Ein Solist darf maximal einer B hne zugeordnet sein param solist der Solist Spalte in der der Solist platziert werden soll param row param col Reihe in der der Solist platziert werden soll public void setSolist Actor solist int col int row liefert den aktuellen Solist return der aktuelle Solist oder null
80. ch eher die entsprechenden Buttons in der Toolbar benutzen Simulation Fenster Hilfe Start Alt S einen Schritt Zeile weiter Alt Pa uru n 4 Komplett zur cksetzen Alt R 1 Ablaufverfolgung aktiv AtA f T T T TI T Abb 5 6 Simulation Men ber das Men Fenster lassen sich weitere Fenster ffnen bzw schlie en Ausgaben und Eingaben mittels System out System err und System in werden an die Konsole weitergeleitet Uber das Befehlsfenster lassen sich Solist Befehle interaktiv ausf hren Das Debuggerfenster zeigt den Stacktrace und die Variablenbelegungen bei der Ausf hrung eines Solist Programms an wenn die Ablaufverfolgung eingeschaltet ist siehe auch Abbildung 5 8 Konsole Alt J Befehlsfenster AltB J Debuggerfenster AltD Abb 5 8 Fenster Men ber das Men Hilfe haben Sie insbesondere die M glichkeit dieses Benutzerhandbuch zu ffnen Weiterhin haben Sie Zugriff auf die detaillierte Referenz der Theater API im javadoc Format siehe auch Abbildung 5 9 Benutzungshandbuch F1 Theater API Strg 2 ber Solist Strg 3 Abb 5 9 Hilfe Men 31 5 2 Toolbar ber die Toolbar sind die wichtigsten Funktionalit ten des Simulators durch einen einfachen Mausklick ausf hrbar Abbildung 5 10 skizziert den Aufbau der Toolbar Rechts von der Toolbar hinaus k nnen dazu weitere so genannte Aktionsbuttons angelegt werden siehe Abschnitt 7 8 R ckg ngig
81. chrittweise Ausf hrung und Ablaufverfolgung zu den Debugger Funktionen siehe auch Abbildung 7 18 Ablaufverfolgung gt m a 4 Schrittweise Ausf hrung Abb 7 18 Debugging Buttons der Toolbar 7 7 1 Beobachten der Programmausf hrung Durch Anklicken des Buttons Ablaufverfolgung 17 Button der Toolbar von links aktivieren bzw bei erneuten Anklicken deaktivieren Sie die Ablaufverfolgung des Debuggers Bei der Aktivierung ffnet sich dazu das Debugger Fenster siehe Abbildung 7 19 Dieses k nnen Sie auch ber das Men Fenster sichtbar bzw unsichtbar machen Ist die Ablaufverfolgung aktiviert wird bei der Ausf hrung des Programms im Editor Bereich der Befehl bzw die entsprechende Zeile der als n chstes ausgef hrt wird blau markiert Bei einem Prozedur bzw Funktionsaufruf wird in die entsprechende Funktion gesprungen Weiterhin werden im Debugger Fenster der aktuelle Stack der Funktionsaufrufe Name der Funktion und aktuelle Position der Ausf hrung der Funktion sowie die aktuelle Belegung der Variablen dargestellt 67 Debugger Programm Funktion 9 EI Solist solist main EI ingl zahlen zaehlen amp c3 intg 0 EJ intg 1 i int 0 34 N int f1 47 o 29 int 2 U int bis 101 N int ergebnis 0 Abb 7 19 Debugger Fenster Im linken Bereich des Debugger Fensters werden Informationen zu den aktiven Funktionen angezeigt und zwar jeweils der N
82. chtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event lic void mouseReleased MouselInfo e 99 HR HH HO3H H HOH HH HH HOF HOF HH HH Wird aufgerufen wenn ein mouseClicked Event auf der B hn ingetreten ist d h eine Maustaste geklickt wurde w hrend sich der Mauszeiger oberhalb der B hne befindet Soll eine B hne auf mouseClicked Events reagieren muss sie diese Method ntsprechend berschreiben Genauer Informationen zu mouseClicked Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf mouseClicked Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Kom
83. cked Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event public void mouseClicked Mouselnfo e HH E e e E E E E a HH HH HH HH OHIO NH HH Wird aufgerufen wenn ein mouseDragged Event auf der Komponente eingetreten ist d h die Maus bei gedr ckter Maustaste bewegt wurde w hrend sich der Mauszeiger auf dem Icon der Komponente befindet Soll eine Komponente auf mouseDragged Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mouseDragged Events finden sich in der Klasse java awt event MouseMotionListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf mouseDragged Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Kompone
84. d Bei gleicher z Koordinate zweier Komponenten ist deren Zeichenreihenfolge undefiniert Komponenten kann ein Rotationswinkel zugeordnet werden Dazu dient die Methode setRotation Der bergebene Parameter definiert den absoluten Rotationswinkel des Icons der Komponente im Uhrzeigersinn Standardm ig ist der Rotationswinkel einer Komponente 0 Es ist zu beachten dass der Rotationswinkel keinen Einfluss auf die Weite und H he eines einer Komponente zugeordneten Icons hat Diese werden immer auf der Grundlage eines Rotationswinkels von 0 berechnet ber die Methode setVisible kann die Sichtbarkeit einer Komponente ver ndert werden Standardm ig sind Komponenten sichtbar Es ist zu beachten dass auch unsichtbare Komponenten in Kollisionsberechnungen mit einbezogen werden Alle Initialisierungen einer Komponente die unabh ngig von der B hne sind k nnen im entsprechenden Konstruktor erfolgen F r alle B hnen abh ngigen Initialisierungen muss eine Methode addedToStage berschrieben werden die aufgerufen wird sobald die Komponente auf der B hne platziert wurde 6 2 2 Getter Methoden ber Getter Methoden l sst sich der Zustand einer Komponente abfragen Es sind entsprechende Methoden f r die Abfrage des zugeordneten Icons der aktuellen Position der Komponente auf der B hne der z Koordinate des Rotationswinkels und der Sichtbarkeit definiert Weiterhin existieren Methoden zur Ermittelung des aktuellen B hnen und Perfor
85. des entsprechenden Theraterst cks befinden Unterst tzt werden die Formate wav au und aiff lt p gt lt p gt ber die Methode setActiveStage ist es m glich die aktuell aktive B hne gegen eine andere B hne auszutauschen d h das B hnenbild zu wechseln Unter 112 HR HH e E e e a e a a e HH HH HH HH Umst nden aktive Akteure der alten B hne werden dabei nicht automatisch gestoppt Die Methode getActiveStage liefert die gerade aktive B hn lt p gt lt p gt Das w hrend einer Auff hrung aktuelle Performance Objekt kann mit Hilfe der statischen Methode getPerformanc rmittelt werden Ein Wechsel des Performance Objektes ist w hrend einer Auff hrung nicht m glich author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 x y public class Performance Minimale Geschwindigkeit ER public static int MIN SPEED 0 Maximale Geschwindigkeit public static int MAX_SPEED 100 Default Geschwindigkeit public static int DEF _ SPEED 50 Default Konstruktor zur Initialisierung eines Performance Objektes Der Zustand des Performance Objektes wird auf STOPPED gesetzt die Geschwindigkeit auf DEF_SPEED y public Performance Liefert das aktuell gesetzte Performance Objekte return das aktuell gesetzt
86. die von der Java GUI Programmierung bekannten thoden zur Verarbeitung von Maus Events mousePressed mouseReleased mouseClicked mouseDragged mouseMoved mouseEntered und mouseExited Die Events entsprechen dabei den Events des Java AWT in den Klassen java awt event MouseListener bzw java awt event MouseMotionListener Den Methoden werden Objekte vom Typ Mouselnfo bergeben ber die genauere Informationen ber das entsprechend Event abgefragt werden k nnen lt p gt lt p gt Die Klasse Mouselnfo ist von der Klasse java awt event MouseEvent abgeleitet so dass auch alle deren Methoden benutzt werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 8 public class Mouselnfo extends java awt event MouseEvent Konstruktor zur Initialisierung eines MouseInfo Objektes mit einem MouseEvent Objekt lt p gt lt p gt Der Konstruktor wird Theater intern aufgerufen param e das eingetretene MouseEvent zy public MouseInfo java awt event MouseEvent e berschreibt die geerbte Methode und liefert das jeweilige Komponenten bzw B hnenobjekt oberhalb dessen Ikon das Event aufgetreten ist return das jeweilige Komponenten bzw B hnenobjekt oberhalb dessen DB Ikon das Event aufgetreten ist see java util EventObject getSource amp 7 public Object getSource berschreibt die geerbte Methode In dem Fall dass d
87. dm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf keyTyped Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden 97 param e enth lt Details zum eingetretenen Event 7 public void keyTyped KeyInfo e Wird aufgerufen wenn w hrend die B hne den Focus besitzt ein keyPressed Event eingetreten ist Soll eine B hne auf keyPressed Events reagieren muss sie diese Method ntsprechend berschreiben Genauer Informationen zu keyPressed Events finden sich in der Klasse java awt event KeyListener bergeben wird der Methode ein KeyInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingKeyEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf keyPressed Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto
88. e Performance Objekt E public static Performance getPerformance Stopped eine Performance und setzt sie in den Zustand STOPPED Wenn sich die Performance bereits im Zustand STOPPED befindet passiert nichts lt p gt lt p gt Die Methode kann aus einem Programm heraus aufgerufen werden Sie wird in Solist NICHT aufgerufen wenn der Nutzer im Theater Simulator den Stopp Button anklickt public final void stop Pausiert eine Performance und setzt sie in den Zustand PAUSED Die Ausf hrung dieser Methode bewirkt nur dann etwas wenn sich die Performance im Zustand RUNNING befindet lt p gt lt p gt Die Methode kann aus einem Programm heraus aufgerufen werden Sie wird in Solist NICHT aufgerufen wenn der Nutzer im Theater Simulator den Pause Button anklickt x I public final void suspend 113 Diese Methode wird unmittelbar nach dem Starten bzw Fortsetzen eines Theaterst cks aufgerufen lt p gt lt p gt Sollen mit dem Start eines Theaterst cks weitere Aktionen einhergehen muss der Programmierer eine Klasse von der Klasse Performance ableiten und diese Method ntsprechend berschreiben Kr public void started Diese Methode wird unmittelbar nach dem Stoppen eines Theaterst cks aufgerufen lt p gt lt p gt Sollen
89. e Stelle gesetzt Sie m ssen nun die einzelnen Fehler beseitigen und dann erneut speichern und compilieren bis Ihr Programm und Ihre Klassen keine Fehler mehr enthalten Der Fehlermeldungsbereich schlie t sich dann automatisch wieder Solist demo Miniwelt Medien Programm B hne Simulation Fenster Hilfe Bla Do a xlale 2 14 void laufeZunBerg aji 15 while vornFrei 20 void erklimmeGipfel 21 do L 22 erklimmeEineStufe do vornFrei void erklimmeEinestufe linksUn vor rechts Un vor 23 24 25 26 27 28 29 32 33 void rechtsUm kehrt linksUn Zeile Problem s sind Compilierfehler aufgetreten Abb 7 14 Fehlermeldungen des Compilers Achtung Die Interpretation von Fehlermeldungen die der Compiler ausgibt ist nicht trivial Die Meldungen sind nicht immer besonders pr zise und oft auch irref hrend H ufig gibt der Compiler mehrere Fehlermeldungen aus obwohl es sich nur um einen einzelnen Fehler handelt Deshalb beherzigen Sie gerade am Anfang folgende Hinweise Arbeiten Sie die Fehlermeldungen immer von oben nach unten ab Wenn der Compiler eine gro e Menge von Fehlermeldungen liefert korrigieren Sie zun chst nur eine Teilmenge und kompilieren Sie danach erneut 7 4 Gestalten und Verwalten der B hne Bevor wir uns die n chsten Funktionalit ten anschauen gestalten Sie zun chst einmal das Territorium so dass es wie in Abbildun
90. e der Programmierer verhindern dass die Aktion eines Aktionsbutton ausgef hrt wird w hrend eine Simulation l uft Dies kann durch eine entsprechende Performance Klasse umgesetzt werden die die beiden Methoden started und stopped berschreibt Beispiel Bei unserem Demo Beispiel soll die Gr e des Territoriums nicht w hrend einer laufenden Simulation ver ndert werden k nnen Unsere Perf1 Klasse muss dann folgenderma en ver ndert werden 90 import theater public class Perfl extends Performance private boolean running false Override public void started setSpeed Performance MAX SPEED Performance MIN SPEED 2 running true Override public void stopped running false public boolean isRunning return running Und die Klasse des Aktionsbuttons GroesseAendern muss folgenderma en angepasst werden public class GroesseAendern extends ActionHandler public void handleAction Stage stage Actor solist if Perfl Performance getPerformance isRunning rerurn SizeDialog dialog new SizeDialog stage dialog setVisible true 91 9 Referenzhandbuch Dieses Kapitel enth lt die genaue Beschreibung der einzelnen Klassen der Theater API und ihrer Methoden 9 1 Stage package theater HH e eR aE e ae ae aa ae a O er e e a e e E E a e aE a e e e a ae E E bis Die Gestaltung einer konkreten B hne kann
91. e von der B hne Wenn die Komponente nicht auf der B hne platziert ist passiert nichts Achtung Der Solist kann nicht von der B hn ntfernt werden param comp die Komponente die von der B hn ntfernt werden soll EJ public void remove Component comp Entfernt alle Komponenten der Liste von der B hne Achtung Der Solist kann nicht von der B hn ntfernt werden param components enth lt die Komponenten die von der B hn ntfernt werden x sollen S 94 public void remove List lt Component gt components Ordnet der B hn in Hintergrundbild zu Erlaubt sind Bilder der Formate gif jpg und png Das Bild wird mit der linken oberen Ecke auf die linke obere Ecke der B hne platziert Ist das Bild gr er als die B hne wird rechts und oder unten abgeschnitten Ist das Bild kleiner als die B hne wird es repliziert dargestellt bis die komplette B hne berdeckt ist param filename X Name der Bilddatei die Datei muss sich im Unterverzeichnis h image des Theaterst ck Verzeichnisses befinden throws IllegalArgumentException wird geworfen wenn die angegebene Datei keine g ltige lesbare Bilddatei ist NS public final void setBackground String filename throws IllegalArgumentException Ordnet der B hn in TheaterImage als Hintergrundbild zu Das Bild wird mit der linken oberen Ecke auf die linke obere Ecke der B
92. elen Sie danach am besten zun chst einmal mit ein paar Beispielszenarien herum die sich im Unterordner plays im Solist Ordner befinden siehe auch Kapitel 10 Gehen Sie bspw folgenderma en vor 3 1 ffnen einer existierenden Miniwelt Doppelklicken Sie die Datei solist jar im Solist Ordner Damit wird die Solist IDE gestartet Zun chst erscheint ein Startbild siehe Abbildung 3 1 dann nach ein paar Sekunden das Hauptfenster der Solist IDE siehe Abbildung 3 2 W hlen Sie im Men Miniwelt den Eintrag ffnen Begeben Sie sich ber die Dateiauswahl in den Unterordner plays engl Theaterst cke und w hlen Sie ein Theaterst ck aus bspw das Theaterst ck hamster siehe Abbildung 3 3 Es ffnet sich ein neues Hauptfenster mit dem Theaterst ck Hamster siehe Abbildung 3 4 Das andere Hauptfenster k nnen Sie schlie en Solist Version 2 1 Entwicklungsumgebung f r Miniprogrammierwelt Simulatoren CARL VON OSSIETZKY un versit t OLDENBURG Abb 3 1 Startbild Miniwelt Medien Programm B hne Simulation Fenster Hilfe Abb 3 2 Hauptfenster a X autorennen N kara damen X Kopie von terminal E frosch X springer fruechte 3Y sudoku i gameoflife fl terminal geisterstunde tictactoe R X turtle Dateiname hamster ww OO Abb 3 3 Auswahl des Theaterst ckes hamster 19 Solist hamster Miniweit Medien Programm B hne Simulation Fenster Hilfe Bla DOS H
93. elklick ffnen wir den Editor der Klasse MauerDaException und geben dort folgendes ein import theater public class MauerDaException extends RuntimeException public MauerDaException public String getMessage return Vor dem Hamster befindet sich eine Mauer 7 1 6 Erweitern der Klasse Hamster Mit den beiden gerade definierten Klassen Mauer und MauerDaException wollen wir nun unsere MPW um zwei weitere Befehle vor und vornFrei erweitern Dazu ffnen wir wieder den Editor der Klasse Hamster Doppelklick auf Hamster im Klassenbereich und erweitern die Klasse Hamster durch die beiden folgenden Methoden Description Liefert genau dann true wenn sich vor dem Hamster keine Mauer und auch nicht der Rand des Territoriums befindet public boolean vornFrei ermittle aktuelle Position int col this getColumn int row this getRow ermittle vorne Position in Abhaengigkeit von Blickrichtung switch this blickrichtung case 0 Ost colt t break case 1 Nord rowW break case 2 West Cols break case 3 Sued rowtt break ueberpruefe vorne Position if col gt this getStage getNumberOfColumns row gt this getStage getNumberOfRows col lt 0 row lt 0 55 Hamster befindet sich am Rand return false Mauer vor dem Hamster return this getStage getComponen
94. ellArea implements PixelArea Spalte der linken oberen Ecke des CellArea Gebietes aA protected int fromCol Reihe der linken oberen Ecke des CellArea Gebietes K protected int fromRow Breite d h Anzahl an Spalten des CellArea Gebietes x protected int numberOfCols H he d h Anzahl an Spalten des CellArea Gebietes A protected int numberOfRows Konstruktor zum Initialisieren der CellArea param fromCol u Spalte der linken oberen Ecke des CellArea Gebietes param fromRow Reihe der linken oberen Ecke des CellArea Gebietes param numberOfCols 5 Breite d h Anzahl an Spalten des CellArea Gebietes param numberOfRows 5 H he d h Anzahl an Spalten des CellArea Gebietes a public CellArea int fromCol int fromRow int numberOfCols int numberOfRows 133 berpr ft ob der Punkt mit den als Parameter bergebenen Koordinaten innerhalb der aufgerufenen CellArea liegt param x x Koordinate des Punktes param y y Koordinate des Punktes return genau dann true wenn der Punkt mit den als Parameter bergebenen Koordinaten innerhalb der aufgerufenen CellArea liegt HH HH HH HHRHH s theater PixelArea contains int int public boolean contains int x int y berpr ft ob die aufgerufene CellArea komplett innerhalb der als Parameter bergebenen PixelArea liegt param area die zu vergleichende PixelArea return genau dann true
95. em m glichen Online Handbuch f r die generierte PLU e Handbuch offline Ein Handbuch als PDF Datei bzw alternativ eine zip Datei mit HTML Seiten sowie eine Datei namens index html Hinweis Aufgrund eines Fehler in der JVM d rfen die Dateinamen in der zip Datei keine Umlaute enthalten e Startbild Ein so genannter Spashscreen das ist eine gif png oder jpg Datei die beim Starten der generierten PLU angezeigt werden soll w hrend notwendige Ressourcen geladen werden e Debugging Ist das H ckchen gesetzt enth lt die generierte PLU auch die in Abschnitt 7 7 vorgestellten Debugging Funktionalit ten Bei nicht gesetztem H kchen werden diese in der PLU entfernt e Variante Normalerweise wird ein Java Simulator Generiert Auf Wunsch kann aber auch ein Scratch Simulator in zwei verschiedenen Varianten deutsche oder englische Bl cke generiert siehe Kapitel 7 10 Wir geben nun bspw den Namen Demo Hamster Simulator ein w hlen das Verzeichnis demosimulator aus und geben als URL Handbuch die URL http www java hamster modell de ein Dann klicken wir auf den OK Button Innerhalb weniger Sekunden wird dann die PLU generiert Um uns einen Einblick von unserer PLU zu verschaffen begeben wir uns in das angegebene Verzeichnis demosimulator Dort gibt es eine Datei simulator jar eine Datei solist properties und einen Ordner data Starten l sst sich die generierte PLU durch Doppelklick auf die Datei
96. enburg Germany version 1 0 03 11 2009 HH S e EE S DF a public abstract class ActionHandler Die berschriebene Methode wird aufgerufen wenn der Benutzer den Aktionsbutton anklickt param stage die aktuelle B hn param solist der aktuelle Solist HH HH HRHHH NS public abstract void handleAction Stage stage Actor solist 9 7 2 ClickHandler package theater import java util List Klasse f r die Realisierung von Aktionsbuttons bei denen Mausklicks auf der B hne zu bestimmten Aktionen f hren sollen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 Eh public abstract class ClickHandler Die berschriebene Methode wird aufgerufen wenn der Aktionsbutton aktiviert ist und der Benutzer auf die B hne klickt param stage die aktuelle B hn param solist X der Solist param col X die Spalte der B hne auf der der Mausklick erfolgt ist param row die Reihe der B hne auf der der Mausklick erfolgt ist param clickedComponents 135 S u U angeklickte Komponenten auf der B hne in der Reihenfolg ihrer Z Koordinaten aA public abstract void handleClick Stage stage Actor solist int col int row List lt Component gt clickedComponents 9 7 3 NewPropHandler package theater Klasse f r die Realisierung von Aktionsbuttons ber di in neues Pr
97. erden Auch Programme objektbasierte PLUs werden durch Aufruf der main Prozedur bzw main Methode gestartet Zus tzlich kann dem Solist wie in Abschnitt 7 1 2 beschrieben ein Name zugeordnet und Befehlen dieser Name vorangestellt werden Im Beispiel Theaterst ck oodemo wird die Entwicklung objektbasierter MPWs demonstriert Die Klassen dieses Theaterst cks unterscheiden sich nicht von den Klassen des oben entwickelten Theaterst cks demo Einziger Unterschied ist dass in dem Men Programm das H kchen beim Item imperative Solist Programme entfernt wurde Die Solist Programme haben im Theaterst ck oodemo allerdings die folgende Gestalt Aufgabe Der Hamster steht mit Blickrichtung Osten vor einem Berg mit regelm igen jeweils eine Kachel hohen Stufen Er bekommt die Aufgabe den Berg zu erklimmen und auf dem Gipfel stehen zu bleiben public class Solist extends Hamster void main willi laufeZumBerg willi erklimmeGipfel void laufeZumBerg while willi vornFrei willi vor void erklimmeGipfel do willi erklimmeEineStufe while willi vornFrei void erklimmeEineStufe willi linksUm willi vor willi rechtsUn willi vor void rechtsUm kehrt linksUm void kehrt willi linksUm willi linksUm r r 85 86 8 Tipps und Tricks In diesem Abschnitt werden einige Tipp
98. eren von Solist Programmen 444sssssnss seen 57 7 2 1 Schreiben eines neuen Solist Programms 22244444400nnn ern 58 7 2 2 ndern des aktuellen Solist Programms uuneaeaeaesenennnannenennnnnnnnenennnnn 58 7 2 3 L schen des aktuellen Solist Programn 42444444400Rn nenn 58 7 2 4 Abspeichern des aktuellen Solist Programms 4 58 7 2 5 ffnen eines einmal abgespeicherten Solist Programms 59 7 2 6 Drucken eines Solist Programms 24444444400nnnnnnnnnnnnnnnnnnnnnnnnn nn 59 7 2 7 Edllietl F nklionenzssau ara aaa 59 7 3 GOMpllieren zrsessteseieseieeieteeeeisseiedelsehee 60 7 31 G mpilierem ssa Aaaa anna aniirangee 60 7 3 2 Beseitigen von Fehlern uuu444444444444BBHnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 60 7 4 Gestalten und Verwalten der B hne suusss2442snnnnnnnnnnnnnnnnnnnnnnnn 61 7 4 1 Abspeichern der B hne 62 7 4 2 Wiederherstellen einer abgespeicherten B hne 62 7 5 Interaktives Ausf hren von Solist Befehlen 2444000snsnnn sn 63 7 5 1 Befehlsfensteri nen ee 63 7 5 2 Parameter ans RER 64 7 5 3 R ckgabewerte von Funktionen 444444440snnnnnnennnnnnnnnnnnnnnnnn nn 64 7 5 4 Befehls Popup Men a ra aan eeneke 64 7 5 5 Klassen Popup Men 2222444400004440nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 65 7 6 A
99. ert der z Koordinate einer Komponente ist umso weiter gelangt das Icon der Komponente auf der B hne in den Vordergrund Die Zeichenreihenfolge von Komponenten mit gleicher z Koordinate ist undefiniert Standardm ig hat die z Koordinate einer Komponente den Wert DEF Z COORDINATE param newz x die neue z Koordinate der Komponente Dj public void setZCoordinate int newz 104 Liefert die aktuelle z Koordinate der Komponente return die aktuelle z Koordinate der Komponente s public int getZCoordinate Legt den Rotationswinkel fest mit der das Icon der Komponente gezeichnet werden soll Die Drehung erfolgt im Uhrzeigersinn Standardm ig betr gt der Rotationswinkel 0 lt p gt lt p gt Achtung Der Rotationswinkel hat keinen Einfluss auf die Weite und H he eines einer Komponente zugeordneten Icons Diese werden immer auf der Grundlage eines Rotationswinkels von 0 berechnet param rotation x der neue Rotationswinkel der Komponente NS public void setRotation int rotation Liefert den aktuellen Rotationswinkel der Komponente return der aktuelle Rotationswinkel der Komponente N public int getRotation ber diese Methode k nnen Komponenten sichtbar bzw unsichtbar gemacht werden In m glichen Kollisionsabfragen werden allerdings auch unsichtbare Komponenten mit einbezogen x param visible 3 f
100. erzeugte Klasse Territorium angezeigt wird siehe Abbildung 7 3 Standardm ig besteht das Territorium aus 30 20 Zellen die jeweils 10 Pixel hoch und breit sind und es wird ein Default Solist in der Mitte des Territoriums erzeugt 47 demo Territorium java DAR Datei Bearbeiten Format amp b l import theater public class Territorium extends Stage public Territoriun Beispiel Erzeuge eine B hne mit 30 20 Zellen die jeweils 10 Pixel hoch und breit sind super 30 20 10 erzeugt den Solist und platziert in mitten auf der B hne set5olist Actor createSolist getNumber fColumns 2 getNumberd fRows 2 Abb 7 3 Editor mit Stage Klasse Territorium ndern und speichern Sie nun den Inhalt des Klasse Territorium wie folgt ab import theater public class Territorium extends Stage public Territorium Beispiel Erzeug ine B hne mit 12 8 Zellen die jeweils 35 Pixel hoch und breit sind super 12 8 35 setBackground kachel jpg erzeugt den Solist und platziert in oben links auf der B hne setSolist Actor createSolist 0 0 Insbesondere wollen wir der B hne einen Hintergrund zuordnen und zwar mit einem Bild Um Bilder verf gbar zu haben m ssen wir Sie zun chst importieren Aktivieren Sie dazu im Men Medien das Item Bilder importieren Es erscheint eine spezielle Dateiauswahl Dialogbox Navigieren Sie i
101. es Programm kurzfristig anhalten k nnen Sie dies durch Anklicken des Pause Buttons 13 Button der Toolbar von links tun Wenn Sie anschlie end auf den Start Fortsetzen Button klicken wird die Programmausf hrung fortgesetzt 7 6 4 W hrend der Ausf hrung eines Solist Programms Treten bei der Ausf hrung eines Programms Laufzeitfehler auf z B wenn Ihr Hamster gegen eine Mauer donnert wird eine Dialogbox ge ffnet die eine entsprechende Fehlermeldung enth lt Nach dem Anklicken des OK Buttons in der Dialogbox wird das Solist Programm beendet Weiterhin ffnet sich das Konsolen Fenster in dem ebenfalls die Fehlermeldung ausgegeben wird W hrend der Ausf hrung eines Solist Programms ist es durchaus noch m glich die B hne umzugestalten also bspw dort neue Mauern zu platzieren 7 6 5 Einstellen der Geschwindigkeit Mit dem Schieberegler in der Toolbar k nnen Sie die Geschwindigkeit der Pro grammausf hrung beeinflussen Je weiter links der Regler steht desto langsamer wird das Programm ausgef hrt Je weiter Sie den Regler nach rechts verschieben umso schneller flitzt der Solist ber die B hne 7 6 6 Wiederherstellen der B hne Beim Testen eines Programms recht hilfreich ist der R cksetzen Button 15 Button der Toolbar von links Sein Anklicken bewirkt dass die B hne in den Zustand zur ckversetzt wird den sie vor dem letztmaligen Start eines Programms inne hatte Dieses R cksetzen funktioniert
102. ett reinitialisiert e Geschwindigkeit Steuerungsregler zum Regeln der Geschwindigkeit einer Auff hrung Je weiter der Regler rechts steht desto schneller ist die Ausf hrungsgeschwindigkeit e Ablaufverfolgung Aktiviert die Ablaufverfolgung siehe Debugger Funktionen in Abschnitt 7 7 5 3 Klassenbereich Im Klassenbereich wird ein Klassenbaum angezeigt der die aktuellen Klassen des Theaterst cks enth lt bzw anzeigt Die Klassen sind dabei gegliedert in Stage Actor Prop Performance und Other Klassen M chte man eine neue Klasse erzeugen muss man ber dem entsprechenden Ordner ein Popup Men aktivieren rechte Maustaste und dort das Item Neue Unterklasse ausw hlen Anschlie end wird man aufgefordert den Namen der neuen Klasse einzugeben Wichtig Bei dem Namen muss es sich um einen korrekten Bezeichner f r Java Klassen handeln Nach Anklicken des OK Buttons wird eine neue Klasse erzeugt und in den Klassenbaum eingef gt Durch Doppelklick auf den Namen der Klasse ffnet sich ein Editor in dem man die Klasse editieren kann F r jede Klasse existiert ein Popup Menu Nach dessen Aktivierung rechte Maustaste hat man die M glichkeit den Editor aufzurufen oder die Klasse zu l schen Weiterhin werden im Popup Men alle static Methoden der Klasse aufgef hrt die interaktiv durch Mausklick aufgerufen werden k nnen In den Popup Men s von Stage und Prop Klassen erscheinen ferner auch f r jeden Ko
103. existierendes java awt Rectangle Objekt draf 128 HH HH HHH 7 param x param y x Koordinate des Punktes y Koordinate des Punktes return genau dann true wenn der Punkt mit den als Parameter bergebenen Koordinaten innerhalb des aufgerufenen Rechteckes liegt s theater PixelArea contains int public boolean contains int x int y HH HH E x7 public boolean isInsid HH HH HHRRHHH NS pub EA E pub pub pub pub berpr ft ob das aufgerufen param a rea Parameter bergebenen PixelArea liegt int die zu vergl return genau dann true ichende PixelArea wenn das aufgerufen Rechteck komplett innerhalb der als chteck komplett innerhalb der als Parameter bergebenen PixelArea E u berpr f theater PixelArea isInsid rufene Rechteck di PixelArea area t ob das aufg PixelAr param a a schneidet rea die zu vergl ichende PixelArea return genau dann true theater PixelAr liegt a als Parameter bergeben bergebene PixelArea schneidet wenn das aufgerufen Rechteck di als Parameter 129 s theater PixelArea intersects theater PixelArea lic boolean intersects PixelArea area Liefert die x Koordinate der l
104. finiert Methoden zur Steuerung und Verwaltung der Ausf hrung von Threadnocchio Programmen e stop Stoppt eine Auff hrung e suspend Pausiert eine Auff hrung e setSpeed ndert die Ausf hrungsgeschwindigkeit einer Auff hrung e freeze Friert die Ausgabe der B hne ein die Akteure agieren jedoch weiter e unfreeze Das Einfrieren der B hne wird wieder aufgehoben Weiterhin werden folgende Methoden definiert die unmittelbar nach entsprechenden Steuerungsaktionen aufgerufen werden und zwar auch wenn die Aktionen durch die Steuerungsbuttons des Simulators ausgel st wurden e started e stopped e suspended e resumed e speedChanged M chte ein Programmierer zus tzliche Aktionen mit den entsprechenden Steuerungsaktionen einhergehen lassen kann er eine Unterklasse der Klasse Performance definieren und als aktive Peformance Klasse kennzeichnen und hierin die entsprechende Methode berschreiben Zus tzlich stellt die Klasse Performance eine Methode playSound zur Verf gung mit der eine Audio Datei abgespielt werden kann Die Datei muss sich im Unterverzeichnis sounds des entsprechenden Theraterst cks befinden Unterst tzt werden die Formate wav au und aiff ber die Methode setActiveStage ist es m glich die aktuell aktive B hne gegen eine andere B hne auszutauschen d h das B hnenbild zu wechseln die Methode ist aktuell allerdings nicht implementiert Die Methode getActiveStage liefert die gerade aktive B
105. fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e HH e E a E a E E HH HH HOF HOF HH HH enth lt Details zum eingetretenen Event 7 public void keyPressed KeyInfo e Wird aufgerufen wenn w hrend die B hne den Focus besitzt ein keyReleased Event eingetreten ist Soll eine B hne auf keyReleased Events reagieren muss sie diese Method ntsprechend berschreiben Genauer Informationen zu keyReleased Events finden sich in der Klasse java awt event KeyListener bergeben wird der Methode ein KeyInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingKeyEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf keyReleased Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden FH e a E E E
106. g 7 15 skizziert ausschaut 61 ledien Programm B hne Simulation Fenster Hilfe a xma ale gt aa Ey Abb 7 15 B hne gestalten Der Hamster ist der Solist In einer Solist MPW existiert immer genau ein Solist Es ist nicht m glich mehrere Solisten zu erzeugen und es ist auch nicht m glich den einen existierenden Solist zu l schen Dahingegen k nnen von den von Ihnen definierten Prop Klassen neue Objekte erzeugt und auf der B hne platziert werden Aktivieren Sie bspw im Klassenbereich oberhalb von Mauer ein Popup Men und w hlen Sie darin das Item new Mauer aus Es heftet sich ein Mauer Ikon an die Maus Wenn Sie dann auf der B hne eine Kachel anklicken wird die Mauer dort abgelegt Alle Komponenten der B hne k nnen Sie im Territorium per Drag and Drop auf dem entsprechenden Ikon umplatzieren und f r alle Komponenten der B hne k nnen Sie ber deren Ikon ein Popup Men aktivieren und dar ber geerbte Befehle aufrufen ber das Item L schen im Popup Men ist es auch m glich Prop Komponenten wieder zu l schen 7 4 1 Abspeichern der B hne Sie k nnen einmal gestaltete B hnen in einer Datei abspeichern und sp ter wieder laden Zum Abspeichern der aktuellen B hne aktivieren Sie im Men B hne das Men ltem Speichern unter Es ffnet sich eine Dateiauswahl Dialogbox Hierin k nnen Sie den Ordner ausw hlen und den Namen einer Datei
107. g sind Kenntnisse 14 der JDK Klassenbibliothek bspw zur Entwicklung von graphischen Oberfl chen GUls mit Java AWT oder Java Swing 1 4 nderungen von Version 2 1 gegen ber Version 2 0 e Beseitigung einiger interner Fehler e Bei der Generierung lassen sich nun zwei alternative Scratch Versionen unterscheiden o Scratch Simulatoren mit deutschsprachigen Bl cken o Scratch Simulatoren mit englischsprachigen Bl cken e Bei den generierten Scratch Simulatoren lassen sich die Scratch Programme nun ausdrucken bzw als Bilder abspeichern e Die generierten Scratch Simulatoren ben tigen nicht mehr ein JDK als Voraussetzung ein JRE ab der Version 6 gen gt 1 5 nderungen von Version 2 0 gegen ber Version 1 0 e Beseitigung einiger interner Fehler e dGenerierte Simulatoren besitzen nun Neu Laden und Speichern Buttons in der Toolbar e Generierung von Scratch Simulatoren siehe Kapitel 7 10 1 6 Aufbau des Benutzungshandbuchs Dieses Benutzungshandbuch ist so aufgebaut dass nach dieser einleitenden Motivation in Kapitel 2 die Installation und Struktur von Solist beschrieben wird In Kapitel 3 werden Ihnen erste Schritte beim Umgang mit Solist dadurch vorgestellt dass der mit Solist erstellte Hamster Simulator Light um einen Befehl rechtsUm erweitert wird Kapitel 4 geht auf die Grundlagen von Solist insbesondere die zugrunde liegende Theater Metapher ein Kapitel 5 widmet sich dem Solist Simulator und seinen Komp
108. h ne Aspekte Beispielweise ist es m glich den Hamster und Mauern per Drag and Drop au erhalb des sichtbaren Bereichs der B hne zu platzieren Auch ist es m glich eine Mauer ber den Hamster zu platzieren oder auf einer Kachel zwei Mauern zu platzieren Dies l sst sich durch das Uberschreiben der Component Methode setLocation korrigieren Die Methode wird n mlich aufgerufen wenn eine neue Komponente auf der B hne platziert wird und auch wenn sie dort bspw per Drag and Drop umplatziert wird Um die Probleme zu beseitigen definieren wir folgende Methode setLocation in der Klasse Hamster 87 Invisible public void setLocation int col int row if col gt 0 amp amp row gt 0 amp amp col lt this getStage getNumberOfColumns amp amp row lt this getStage getNumberOfRows amp amp this getStage getComponentsAt col row Mauer class size 0 nur innerhalb der sichtbaren B hne und nur falls sich auf der angegebenen Kachel keine Mauer befindet super setLocation col row und folgende Methode setLocation in der Klasse Mauer Invisible public void setLocation int col int row if this getColumn col amp amp this getRow row die Mauer befindet sich bereits auf dieser Zelle return if col lt 0 row lt 0 col gt this getStage getNumberOfColumns row gt this getStage getNumberOfRows nur
109. htung Osten vor einem Berg mit regelm igen jeweils eine Kachel hohen Stufen Er bekommt die Aufgabe den Berg zu erklimmen und auf dem Gipfel stehen zu bleiben 7 void main laufeZunBerg erklimmeGipfel 14 void laufeZunBerg while vornFrei do erklimmeEinestufe while vornFrei 26 void erklimmeEinestufe 27 linksUn 28 vor z ar Aktionsbutton wurde umplatziert Abb 7 21 Solist mit neu definierten Aktionsbuttons 7 9 Geenerieren einer PLU Nun sind wir soweit dass wir aus unserer entwickelten MPW eine PLU generieren k nnen Dazu klicken wir im Men Miniwelt das Item Generieren an Es ffnet sich die in Abbildung 7 22 dargestellte Dialogbox Hierin m ssen bzw k nnen wir folgende Eintr ge vornehmen Simulator generieren Hamster Simulator Light Documents myhamstersimulator Handbuch Online Handbuch Offline Startbild Y Debugging Java Simulator Scratch Simulator deutsch Seratch Simulator englisch Abbrechen Abb 7 22 Generieren Dialogbox 76 e Name obligatorisch Einen Namen f r die generierte PLU Dieser wird sp ter in der Titelzeile des entsprechenden Fensters angezeigt e Verzeichnis obligatorisch Ein Verzeichnis in dem die generierten Dateien abgespeichert werden e Handbuch online Eine URL zu ein
110. ialisiert wird ein Theaterlmage ber entsprechende Konstruktoren entweder mittels einer Bilddatei eines bereits existierenden Theaterlmages oder leer in einer gew nschten Gr e Im ersteren Fall sind Bilder im gif jpg und png Format zul ssig Die Bilddateien m ssen im Unterverzeichnis images des entsprechenden Theaterst ck Verzeichnisses gespeichert werden Die wichtigsten Bild Manipulations Methoden der Klasse TheaterImage sind setColor legt die Zeichenfarbe fest setFont legt den Zeichenfont fest setTransparency legt die Transparenz fest draw Methoden zum Zeichnen von anderen Images Linien Rechtecken Ovalen Polygonen in der aktuellen Zeichenfarbe fi11 Methoden zum Zeichnen von gef llten Rechtecken Ovalen und Polygonen in der aktuellen Zeichenfarbe drawString zum Zeichnen eines Textes im aktuellen Font sowie mirrorHorizontally mirrorVertically rotate und scale zum Spiegeln Rotieren und Skalieren des Bildes Dabei ist zu beachten dass bei den mirror und rotate Methoden die Gr e des Bildes nicht ver ndert wird so dass unter Umst nden Teile des Bildes nicht mehr sichtbar sind Weiterhin 44 kann ber die Methoden clear bzw fill ein Theaterlmage gel scht oder komplett mit der aktuellen Farbe gef llt werden Eine Menge von Getter Methoden erlaubt die Abfrage von Eigenschaften eines Theaterlmage wie Gr e aktuelle Farbe oder aktueller Font Intern wird ein Theaterlmage mit Hilfe der Klasse java awt im
111. ic int getX Liefert die y Koordinate des Punktes auf der B hne return die y Koordinate des Punktes auf der B hne x public int getY Wandelt den Punkt in ein Objekt der Klasse java awt Point um return der Punkt als java awt Point Objekt public java awt Point toAWTPoint 9 6 4 Cell package theater HH pE E k E E Die Klasse Cell repr sentiert eine Zelle der B hne Sie implementiert das Interface PixelArea so dass mit dieser Klasse Kollisionen von Zellen mit anderen Gebieten der B hne berpr ft werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 131 public class Cell implements PixelArea Reihe der Zell BA protected int row Spalte der Zelle ESA protected int col Konstruktor zum Initialisieren einer Zelle mit seiner Spalte und Reihe param col ai die Spalte der Zell param row x die Reihe der Zell 8 public Cell int col int row berpr ft ob der Punkt mit den als Parameter bergebenen Koordinaten innerhalb der aufgerufenen Zelle liegt param x x Koordinate des Punktes param y x y Koordinate des Punktes return genau dann true wenn der Punkt mit den als Parameter bergebenen X Koordinaten innerhalb der aufgerufenen Zelle liegt s theater PixelArea contains in
112. ichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event NS public void keyReleased KeyInfo e Legt fest ob die Komponente Maus Ereignisse behandeln soll Standardm ig ist dies in Solist nicht der Fall 107 Hr param handlingMouseEvents true falls die Komponente Maus Ereignisse behandeln soll false andernfalls public void setHandlingMouseEvents boolean handlingMouseEvents K berpr ft ob die Komponente Maus Ereignisse behandelt Standardm ig ist dies in Solist nicht der Fall return true falls die Komponente Maus Ereignisse behandelt public boolean isHandlingMouseEvents FH FH HHOH3H3 HOTHOHOH FH HHO3 HOHOHO NH HOHO HN NH Wird aufgerufen wenn ein mousePressed Event auf der Komponente eingetreten ist d h eine Maustaste gedr ckt wird w hrend sich der Mauszeiger oberhalb des Icons der Komponente befindet Soll eine Komponente auf mousePressed Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mousePressed Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum e
113. ie Ableitung einer Klasse von der Threadnocchio Klasse Performance Welche Auff hrung dann tats chlich genutzt wird kann vor dem Start der Auff hrung bzw vor dem Generieren einer PLU durch einen einfachen Mausklick auf die entsprechende Klasse ausgew hlt werden Die ausgew hlte Auff hrung wird als aktive Auff hrung bezeichnet Die Variation einer Ausf hrung ergibt sich aus dem berschreiben bestimmter Methoden der Klasse Performance Dies sind insbesondere die Methoden started stopped suspended resumed und speedChanged Die Methoden werden unmittelbar nach der entsprechenden Steuerungsaktion ausgef hrt auch wenn diese durch die Steuerungselemente im Solist Simulator ausgel st wurden Soll bspw beim Start einer Auff hrung die Ausf hrungsgeschwindigkeit des Programms maximiert werden kann dies durch ein entsprechendes berschreiben der started Methode umgesetzt werden 4 6 Hilfsklassen Neben den von den Klassen Stage Actor Prop und Performance abgeleiteten Klassen lassen sich weitere Hilfsklassen definieren und in die Programme einbinden Diese Klassen werden als Hilfsklassen bezeichnet 27 5 Solist Simulator Der Solist Simulator auch als Solist IDE bezeichnet ist ein graphisch interaktives Werkzeug zum Entwickeln und Implementieren von Mini Programmierwelten bzw Theaterst cken und Generieren entsprechender Programmierlernumgebungen Abbildung 5 1 skizziert seinen Aufbau am Beispiel des ge ffneten Hamster Thea
114. ie B hne ber das Maus Event informiert wird also das aktuelle B hnenobjekt das Source Objekt ist liefert die Methode die x Koordinate des Mauszeigers bez glich des Hintergrundes In dem Fall dass eine Komponente ber das Maus Event informiert wird also die Komponente das Source Objekt ist liefert die Methode die x Koordinate des Mauszeigers bez glich des der Komponente zugeordneten Ikons return die x Koordinate des Maus Events relativ gesehen zum Source Objekt see java awt event MouseEvent getX E public int getX berschreibt die geerbte Methode In dem Fall dass die B hne ber das Maus Event informiert wird also das aktuelle B hnenobjekt das Source Objekt ist liefert die Methode die y Koordinate des Mauszeigers bez glich des Hintergrundes In dem Fall dass eine Komponente ber das 124 HH HH HHH 7 Maus Event informiert wird also die Komponente das Source Objekt ist liefert die Methode die y Koordinate des Mauszeigers bez glich des der Komponente zugeordneten Ikons return die y Koordinate des Maus Events relativ gesehen zum Source Objekt see java awt event MouseEvent getY public int getY HH HOHOROH3H HITHHR KH NS berschreibt die geerbt thode In dem Fall dass die B hne ber das aus Event informiert wird also das aktuelle B hnenobjekt das Source Objekt ist liefert die Methode die x und y Koordinate des a
115. ie B hne als auch Komponenten k nnen auf mousePressed Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event public void mousePressed Mouselnfo e HH HH HOH3H H H HH HF e E E E E E E HO HH S pub Wird aufgerufen wenn ein mouseReleased Event auf der B hn ingetreten ist d h eine gedr ckte Maustaste losgelassen wird w hrend sich der Mauszeiger oberhalb der B hne befindet Soll eine B hne auf mouseReleased Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mouseReleased Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseIlnfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf mouseReleased Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt ri
116. ien Programm B hne Simulation Fenster Hilfe Rs B a x ajal 2 c gt l void maini k 2 while vornFrei m age gt cI Actor o cI Prop gt CI Performance gt CI Other void gib theater Actor boolean kornDa theater Component gt void linksUm java lang Object boolean maulLeer void main void nimm e void vor z Fy olean vonr A Hamster h pfeine Rachel in seiner aktuelle Fehler wenn sich dort eine Mauer oder der Rand Abb 3 5 Popup Men des Hamsters 3 4 ndern des Modells der Mini Programmierwelt Um den Grundbefehlssatz des Hamsters durch den Befehl rechtsUm zu erg nzen ffnen Sie den Ordner Actor durch Doppelklick auf das entsprechende Ordersymbol In dem Ordner befindet sich eine Klasse namens Hamster Doppelklicken Sie den Namen Hamster Es ffnet sich ein Editor in dem die Klasse Hamster implementiert ist Scrollen Sie nach unten zur Methode linksUm siehe Abbildung 3 6 und f gen Sie dort die folgende Methode rechtsUm ein Performance getPerformance unlock ter dreht sich linksun ster dreht sich um 90 Grad nach links um ce getPerformance lock z i switch this blickrichtung case SUED this setBlickrichtung Hanster 0ST break case 03T this setBlickrichtung Hamster NORD break case NORD this setBlickrichtung Hamster WEST
117. iersprachenunabh ngig F r viele existieren mehrere Implementierungen die unterschiedliche Programmiersprachen unterst tzen Als Grundlage von Solist wurde jedoch bewusst die Programmiersprache Java gew hlt und ab Version 2 0 zus tzlich die visuelle Programmiersprache Scratch Java ist eine moderne Programmiersprache die sich in den letzten Jahren sowohl im Ausbildungsbereich als auch im industriellen Umfeld immer mehr durchgesetzt hat Scratch wird aktuell in vielen Schulen f r die ersten Schritte beim Programmieren lernen eingesetzt 1 1 2 Begriffliches Im Folgenden soll zwischen den beiden Begriffen Mini Programmierwelt und Programmierlernumgebung unterschieden werden 12 Bei einer Mini Programmierwelt MPW handelt es sich um ein didaktisches Modell in dem die Akteure und anderen Objekte einer virtuellen Landschaft ihre Beziehungen untereinander und ihre m glichen Aktionen und die Befehle zum Steuern der Akteure festgelegt werden Beim Hamster Modell gibt es bspw einen virtuellen Hamster als Akteur sowie Mauern und K rner als weitere Objekte Diese befinden sich in einer Landschaft die aus einzelnen Kacheln besteht Der Hamster kann K rner in sein Maul aufnehmen er darf nicht gegen Mauern laufen Als Befehle gibt es die Grundbefehle vor linksUm nimm und gib und die Testbefehle vornFrei kornDa und maulLeer Um mit einer MPW tats chlich programmieren lernen zu k nnen bedarf es einer Programmierlernumgebung PLU oft a
118. ingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf keyTyped Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event 5 public void mousePressed Mouselnfo e HH HH HH H H HH HH HOF HOF HH HH Wird aufgerufen wenn ein mouseReleased Event auf der B hn ingetreten ist d h eine gedr ckte Maustaste losgelassen wird w hrend sich der Mauszeiger ber dem Icon der Komponente befindet Soll eine Komponente auf mouseReleased Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mouseReleased Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseIlnfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was
119. inken ob Ecke des Rechteckes return die x Koordinate der linken ob Ecke des Rechteckes lic int getX Liefert die y Koordinate der linken ob Ecke des Rechteckes return die y Koordinate der linken ob Ecke des Rechteckes lic int getY Liefert die Breite des Rechteckes return die Breite des Rechteckes lic int getWidth Liefert die H he des Rechteckes return die H he des Rechteckes lic int getHeight Wandelt das Rechteck um in ein Objekt der Klasse java awt Rectangle return das in ein java awt Rectangle Objekt umgewandelte Rechteck 2 public java awt Rectangle toAWTRectangle 9 6 3 Point package theater HH HH HRHRHH S Die Klasse Point repr sentiert ein Pixel auf der B hne Sie implementiert das Interface PixelArea so dass mit dieser Klasse Kollisionen von Pixeln mit anderen Gebieten der B hne berpr ft werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 public class Point implements PixelArea x Koordinate des Punktes y protected int x y Koordinate des Punktes 7 protected int y Konstruktor zum Initialisieren eines Punktes mit seiner x und y Koordinate param x x Koordinate des Punktes param y HH HH HH HR y Koordinate des Punktes 24 public Point int x int y Copy Konstruktor zum Initialisieren eines Punktes mit einem java awt Point Objekt param p
120. isHandlingKeyEvents bzw isHandlingMouseEvents abfragen Standardm ig werden Komponenten und B hnen in Solist nicht ber Tastatur und MouseEvents informiert Die Reihenfolge in der Komponenten bzw die aktive B hne ber Maus und Tastatur Events benachrichtigt werden ergibt sich aus der Zeichenreihenfolge Je weiter eine Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die aktive B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events Aufruf der Methode consume kann die Benachrichtigungskette abgebrochen werden Das den Methoden bergebene Keylnfo bzw Mouselnfo Objekt ist dabei pro Event immer das gleiche Zur Kommunikation zwischen den benachrichtigen Komponenten stellen die Klassen KeyInfo und MouseInfo eine Methode setUserObject zur Verf gung ber die eine Komponente dem KeylInfo bzw Mouselnfo Objekt ein beliebiges anwendungsspezifisches Objekt zuordnen kann das sich durch eine sp ter benachrichtige Komponente durch Aufruf der Methode getUserObject wieder abfragen l sst 6 4 1 Keyinfo Die Klasse KeyInfo ist von der Klasse java awt event KeyEvent abgeleitet stellt also alle deren geerbte Methoden zur Verf gung An dieser Stelle sei auf die entsprechende Dokumentation der Klasse java awt event KeyEvent verwiesen berschrieben ist die Methode getSource die das aktuelle B hnenobjekt liefert 43 6 4 2 Mouselnfo Die Klasse MouseInfo ist von der Klasse ja
121. iwelt das Item Neuer Aktionsbutton und geben Sie in der erscheinenden Dialogbox den Namen GroesseAendern an und w hlen Sie den Typ ActionHandler aus Klicken Sie dann auf den OK Button In der Toolbar erscheint ganz rechts ein neuer Button Ordnen Sie diesem zun chst das Ikon size24 gif und den Tooltip Text Gr e des Territoriums ndern zu Offnen Sie dann den Editor Er enth lt folgenden Text import theater public class GroesseAendern extends ActionHandler public void handleAction Stage stage Actor solist 72 ndern Sie den Text wie folgt ab import theater import java awt BorderLayout import java awt Dimension import java awt FlowLayout import java awt Frame import java awt Toolkit import java awt event ActionEvent import java awt event ActionListener import java util List import javax swing JButton import javax swing JDialog import javax swing JFrame import javax swing JLabel import javax swing JPanel import javax swing JTextField public class GroesseAendern extends ActionHandler public void handleAction Stage stage Actor solist SizeDialog dialog new SizeDialog stage dialog setVisible true class SizeDialog extends JDialog JTextField reihen JTextField spalten Stage stage public SizeDialog Stage stage super Frame null Territorium Gr e true this
122. ksUm Compilieren Sie und f hren Sie dann das Programm durch Anklicken des Start Buttons in der Toolbar aus Der Hamster dreht sich 10 Mal linksum Da Sie dem Hamster den Namen willi gegeben haben k nnen Sie Befehle brigens auch in einer eher objektorientierten Notation ber den Namen willi aufrufen Das gilt auch f r neu definierte Prozeduren und Funktionen void main for int i 0 i lt 10 i willi rechtsUn void rechtsUm willi linksUm willi linksUm willi linksUm 7 1 3 Definition einer neuen Prop Klasse Nun wollen wir eine neue Prop Klasse definieren ber die sich das Platzieren von Mauern im Territorium realisieren l sst Dazu aktivieren wir im Klassenbereich auf dem Ordner Prop ein Popup Men w hlen das Item Neue Unterklasse und geben in der erscheinenden Dialogbox den Namen Mauer ein Nach dem Dr cken des OK Buttons erscheint im Ordner Prop die Klasse Mauer Durch Doppelklick ffnen wir den Editor der Klasse Mauer Er hat die in Abbildung 7 10 skizzierte Gestalt 52 demo Mauer java DER Datei Bearbeiten Format amp D6 l import theater 2 3 public class Mauer extends Prop 4 public Mauer 5 6 7 8 Bi Abb 7 10 Editor der Klasse Mauer ndern Sie die Klasse nun wie folgt ab import theater public class Mauer extends Prop public Mauer setImage mauer png Compilieren Sie
123. le vornFrei vor rechtsUm while vornFrei vor rechtsUm Der Compilieren Button das ist in der generierten PLU der linke Button der Toolbar erscheint rot Klicken Sie ihn zum Kompilieren an Wenn Sie sich nicht vertippt haben sollte eine Dialogbox mit der Meldung OK erscheinen Danach k nnen Sie das Programm durch Anklicken des Start Buttons 15 Button der Toolbar ausf hren Sie sehen in dem von Ihnen generierten Simulator geh rt nun auch der Befehl rechtsUm zu den Standard Befehlen des Hamsters 24 4 Grundlagen 4 1 Theaterst cke bzw Miniwelten Eine MPW wird in Solist als Miniwelt oder auch Theaterst ck Play bezeichnet Ein Theaterst ck ist dabei gleichbedeutend mit dem Begriff Projekt der in vielen Programmentwicklungsumgebungen benutzt wird Ein Theaterst ck setzt sich aus einer Menge von Klassen zusammen die im Allgemeinen von durch Solist zur Verf gung gestellten Klassen abgeleitet werden 4 2 B hnen Handlungsumfeld in Solist ist die B hne Stage Bei der B hne handelt es sich um ein rechteckiges Gebiet das sich aus einzelnen quadratischen Zellen zusammensetzt Die Gr e d h Breite und H he der Zellen wird in Pixeln angegeben siehe Abbildung 3 1 x Achse Spalten 0 1 2 3 4 5 8 oO 3 y Achse Reihen Abb 3 1 B hnenaufbau Der B hne ist ein Koordinatensystem zugeordnet Die linke obere Ecke der B hne besitzt die Koordinaten x 0 y 0
124. lements ActionListener SizeDialog dialog OKButtonAction SizeDialog d this dialog d public void actionPerformed ActionEvent e try int spalten new Integer dialog spalten getText int reihen new Integer dialog reihen getText mindestens 1 Reihe und 1 Spalte if spalten lt 1 spalten 1 if reihen lt 1 reihen 1 Actor solist dialog stage getSolist if solist getRow gt reihen solist getColumn gt spalten Solist ist au erhalb der neuen B hne er wird auf die Kachel 0 0 umplatziert wobei dort unter Umst nden noch eine Mauer entfernt werden muss List lt Component gt mauern dialog stage getComponentsAt 0 0 Mauer class dialog stage remove mauern dialog stage getSolist setLocation 0 0 neue B hnengr e setzen dialog stage setSize spalten reihen this dialog dispose catch NumberFormatException exc 74 class CancelButtonAction implements ActionListener JDialog dialog CancelButtonAction JDialog d this dialog d public void actionPerformed ActionEvent e this dialog dispose Speichern Sie ab kompilieren Sie und probieren Sie den neuen Button aus Bei dessen Anklicken erscheint eine Dialogbox in der Sie die Anzahl an Reihen und Spalten eingeben k nnen Wenn Sie dies tun und den OK Button klicken wird das Territorium in der angegebe
125. letten Sourcecode mit der Maus selektieren und dann in der Toolbar den Ausschneiden Button 6 Button von links dr cken Alternativ kann im Programm Men das Men ltem Neu angeklickt werden 7 2 4 Abspeichern des aktuellen Solist Programms Normalerweise m ssen Sie sich nicht um das Speichern des aktuellen Programms k mmern Es wird automatisch vor dem Compilieren in einer internen Datei abgespeichert Wenn Sie jedoch ein Programm explizit dauerhaft abspeichern 58 m chten k nnen Sie im Programm Men das Speichern unter Men Item anklicken Es ffnet sich eine Dateiauswahl Dialogbox ber die Sie die gew nschte Datei ausw hlen k nnen 7 2 5 ffnen eines einmal abgespeicherten Solist Programms M chten Sie ein einmal abgespeichertes Solist Programm wieder in den Editorbereich laden k nnen Sie dies ber das Men ltem Laden des Programm Men s tun Nach dem Anklicken des Items erscheint eine Dateiauswahl Dialogbox ber die Sie die gew nschte Datei ausw hlen k nnen Achtung Beim Laden einer abgespeicherten Datei geht der aktuelle Inhalt des Editor Bereichs verloren Sie m ssen ihn also gegebenenfalls vorher in einer Datei abspeichern 7 2 6 Drucken eines Solist Programms ber den Drucken Button 5 Toolbar Button von links k nnen Sie das aktuelle Programm des Editor Bereichs drucken Es ffnet sich eine Dialogbox in der Sie die entsprechenden Druckeinstellungen
126. lic boolean intersects PixelArea area 127 9 6 2 Rectangle pac HH HH HRRHRH HR SI pub kage theater Die Klasse Rectangle repr s implementiert das Interfac ntiert ein rechteckiges Gebiet auf der B hne Sie PixelArea k nnen version 1 0 03 11 2009 so dass mit dieser Klasse Kollisionen von rechteckigen Gebieten mit anderen Gebieten der B hne berpr ft werden author Dietrich Boles Universit t Oldenburg Germany lic class Rectangle implements PixelArea x Koordinate der linken oberen Eck protected int x y Koordinate der linken oberen Eck protected int y Breite des Rechteckes GA protected int width H he des Rechteckes F protected int height s Rechteckes oberen Eck oberen Eck int h s Rechteckes mit einem Konstruktor zum Initialisieren ein x param x a x Koordinate der linken param y amp y Koordinate der linken param w x Breite des Rechteckes param h x H he des Rechteckes EY public Rectangle int x int y int w Konstruktor zum Initialisieren ein java awt Rectangle 0bjekt param r x A nicht null sein NS public Rectangle java awt Rectangle r berpr ft ob der Punkt mit den als Parameter bergebenen Koordinaten innerhalb des aufgerufenen Rechteckes liegt in bereits
127. lic int getTransparency Intern wird ein TheaterImage durch ein java awt image BufferedImage Objekt realisiert Diese Methode liefert das entsprechende Objekt Achtung Einige Methoden tauschen intern das BufferedImage Objekt aus return das aktuelle interne BufferedImage Objekt public java awt Image getAwtlmage 9 4 2 Theaterlcon package theater HH ae a e E a Ee e HK be TheaterIcon ist eine von der Theater Klasse TheaterImage abgeleitete Klasse die die Verwendung von Animated GIF Ikons erm glicht lt p gt lt p gt Achtung Die meisten Methoden dieser Klasse berschreiben die von der Klasse TheaterImage geerbten Methoden als leere Methoden da Animated GIFs nicht manipuliert werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 public class TheaterIcon extends TheaterlImage Konstruktor zum Initialisieren eines TheaterIcons mit einem Bild aus einer Datei Erlaubte Bildformate sind gif jpq und png param filename x Name der Bilddatei die Datei muss sich im Unterverzeichnis X images des Theaterst cks befinden throws IllegalArgumentException amp wird geworfen wenn die Datei nicht existiert keine g ltige Bilddatei ist oder nicht lesbar ist EA public TheaterIcon String filename throws IllegalArgumentException Liefert die Breite des TheaterImages in Pixeln
128. limmeEineStufe 28 linksUm ar Abb 7 23 Generierte PLU Die generierte PLU unterscheidet sich in insbesondere in folgenden Funktionalit ten vom Solist Simulator selbst e Im Hauptfenster fehlt der Klassenbereich e In der Toolbar fehlen die beiden ersten Buttons d h zum Anlegen bzw ffnen von Theaterst cken e Es fehlen die Men s Miniwelt und Medien e Die Aktionsbuttons hier Gestaltungsbuttons genannt stehen links von den Steuerungsbuttons in der Toolbar e Nach dem Compilieren wird die B hne nicht jedesmal neu initialisiert Die meisten anderen Funktionalit ten stehen voll zur Verf gung Ich empfehle Ihnen einmal einen Blick in das Benutzungshandbuch des Hamster Simulator Light zu werfen um sich einen berblick ber alle Funktionalit ten zu verschaffen siehe Abschnitt 10 2 7 10 Scratch PLUs Normalerweise werden durch Solist PLUs bzw Simulatoren generiert die die Programmiersprache Java unterst tzen d h die Nutzer der generierten PLUs schreiben ihre Programme in Java Java ist eine textuelle Programmiersprache bei der Programme vor ihrer Ausf hrung zun chst von einem Compiler auf syntaktische Korrektheit berpr ft werden m ssen Gerade Programmieranf nger haben aber 78 h ufig Probleme mit der beim Eingeben des Programmcodes erforderlichen Genauigkeit und den Fehlermeldungen des Compilers Diesbez glich versprechen visuelle interpretierte Programmiersprachen Abhilfe
129. lle eines Aufrufs eine RuntimeException da ein Zugriff auf die Theater intern Java AWT Komponente nicht erlaubt ist return wirft immer eine RuntimeException throws RuntimeException wird bei jedem Aufruf der Methode geworfen HH HH HHHHH see java awt event ComponentEvent getComponent 7 public java awt Component getComponent Setzt die x Koordinate Die Methode wird Theater intern aufgerufen param x die neue x Koordinate Ey public void setX int x Setzt die y Koordinate Die Methode wird Theater intern aufgerufen param y die neue y Koordinate public void setY int y Setzt die Spalte ber der sich der Mauszeiger aktuell befindet Di Methode wird Theater intern aufgerufen param col die neue Spalte A public void setColumn int col Setzt die Reihe ber der sich der Mauszeiger aktuell befindet Di Methode wird Theater intern aufgerufen param row x die neue Reihe E public void setRow int row Setzt das Source Objekt Die Methode wird Theater intern aufgerufen param source das neue Source Objekt 126 2 public void setSource Object source 9 6 Kollisionserkennung 9 6 1 PixelArea package theater o Tera EE D e e a HR PixelArea ist ein Interface das die Grundlage der Kollisionserkennungsmethoden darstellt Eine PixelArea kann man sich dabei als
130. m ein virtueller Marienk fer Kleebl tter suchen und dabei Pilze verschieben und Baumst mpfen ausweichen muss oder die Schildkr tengraphik bei der eine virtuelle Schildkr te mit Hilfe eines Stiftes Zeichnungen Fraktale malen kann Derartige Mini Programmierwelten weisen im Allgemeinen folgende Eigenschaften auf e Es gibt einen virtuellen Akteur der mit Hilfe bestimmter Befehle durch eine virtuelle Landschaft gesteuert werden kann e Die Komplexit t eines Computers wird auf einen minimalen Satz von Befehlen eingeschr nkt die dem Akteur erteilt werden k nnen e Die Programmierkonzepte werden schrittweise und aufeinander aufbauend eingef hrt und jeweils durch zahlreiche Beispiele demonstriert e Anhand vieler Aufgaben mit einfach zu verstehenden Aufgabenstellungen k nnen die Programmieranf nger selbst berpr fen ob sie den Stoff nicht nur verstanden haben sondern auch praktisch umsetzen k nnen e F r die Bearbeitung der Aufgaben existiert eine einfach zu bedienende Programmierlernumgebung die die Erstellung und den Test von Programmen unterst tzt und Programmausf hrungen d h die Aktionen der Akteure visuell auf dem Bildschirm darstellt Mit diesen Eigenschaften tragen Mini Programmierwelten Empfehlungen von Didaktikern wie der Einstieg in die Programmierung erfolgen k nnte voll und ganz Rechnung Br97 BOM99 Prinzipiell sind die meisten der existierenden Mini Programmierwelten zun chst einmal programm
131. mance Objektes 6 2 3 Kollisionserkennungsmethoden Die Klasse Component implementiert das Interface PixelArea Damit k nnen Komponenten unmittelbar selbst in die Kollisionserkennung mit einbezogen werden Die Methode contains berpr ft ob ein bestimmter Punkt innerhalb des Icons 40 einer Komponente liegt ber die Methode isInside l sst sich ermitteln ob das Icon einer Komponente vollst ndig innerhalb einer bestimmten PixelArea liegt und die Methode intersects liefert true falls das Icon einer Komponente eine bestimmte PixelArea schneidet 6 2 4 Event Methoden Soll eine Komponente auf Maus und Tastatur Events reagieren k nnen entsprechend des genauen Event Typs folgende Methoden berschrieben werden keyTyped keyPressed keyRealeased mousePressed mouseReleased mouseClicked mouseDragged mouseMoved mouseEntered mouseExited Die Events entsprechen dabei den Events des Java AWT in den Klassen java awt event KeyListener java awt event MouseListener bzw java awt event MouseMotionListener Den Methoden werden Objekte vom Typ KeyIn fo bzw MouseInfo bergeben ber die genauere Informationen ber das entsprechende Event abgefragt werden k nnen Ob eine Komponente berhaupt ber Tastatur und Maus Events informiert werden sol l sst sich ber die Methoden setHandlingKeyEvents bzw setHandlingMouseEvents festlegen und ber die Methoden isHandlingKeyEvents bzw isHandlingMouseEvents abfragen Standardm
132. micro worlds entwickelt Sie reduzieren den zugrunde liegenden Befehlssatz auf ein Minimum enthalten spielerische Elemente und verbinden mit den entsprechenden Befehlen visuelle Aktionen von virtuellen Akteuren auf dem Bildschirm Ur Vater dieser Miniwelten ist Karel the Robot Karel ist ein virtueller Roboter der mit Befehlen wie move oder turnLeft durch eine virtuelle Landschaft gesteuert werden kann und dabei verschiedene ihm gestellte Aufgaben zu l sen hat Eine andere weit verbreitete Mini Programmierwelt ist das Hamster Modell Programmieranf nger erlernen hiermit die grundlegenden Konzepte der Programmierung sowie den Programmentwicklungsprozess indem sie virtuelle Hamster durch eine virtuelle K rner Landschaft steuern Der Befehlsatz besteht dabei aus vier Grundbefehlen vor linksUm gib nimm und drei Testbefehlen vornFrei kornDa maulLeer Programmieranf ngern werden bestimmte Aufgaben gestellt der Hamster soll alle K rner in seinem Territorium finden und fressen der Hamster soll ein Labyrinth durchlaufen zu denen sie dann Hamster Programme 11 entwickeln m ssen die die Aufgaben l sen Mit dem so genannten Hamster Simulator wird dabei eine Programmierlernumgebung zur Verf gung gestellt mit dem Hamster Programme eingegeben compiliert getestet und ausgef hrt werden k nnen siehe http www java hamster modell de Weitere bekannte Mini Programmierwelten sind Kara der Marienk fer bei de
133. mouseEntered Event auf der B hn ingetreten ist d h der Mauszeiger auf die B hne gezogen wird Soll eine B hne auf mouseEntered Events reagieren muss sie dies thod ntsprechend berschreiben Genauere Informationen zu mouseEntered Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseIlnfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf mouseEntered Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e HH HH HH HOFFT HOT HH HH enth lt Details zum eingetretenen Event Er public void mouseEntered Mouselnfo e Wird aufgerufen wenn ein mouseExited Event auf der B hn ingetreten ist d h der Mauszeiger die B hne verl sst Soll eine B hne auf mouseExited Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen
134. n xy die aktuell Zeichenfarbe des TheaterImag e public java awt Color getColor HH HH HR HR Setzt den Font drawString Method param f TheaterImag n gezeichnet werden in dem Texte durch nachfolgende Aufrufe der in dem TheaterImage gezeichnet werden sollen der neue Font public void setFont java awt Font f Liefert den aktuellen Font des TheaterImages 117 return der aktuelle Font des TheaterImages 8 public java awt Font getFont Zeichnet im TheaterImag ine Linie in der aktuellen Zeichenfarb param x1 x x Koordinate von der aus die Linie gezeichnet werden soll param yl x y Koordinate von der aus die Linie gezeichnet werden soll param x2 u x Koordinate bis wohin die Linie gezeichnet werden soll param y2 x y Koordinate bis wohin die Linie gezeichnet werden soll 7 public void drawLine int x1 int yl int x2 int y2 Zeichnet im TheaterImag in Rechteck in der aktuellen Zeichenfarb param x x Koordinate der linken oberen Ecke des Rechtecks param y K y Koordinate der linken oberen Ecke des Rechtecks param width X Breite des Rechtecks in Pixeln param height H he des Rechtecks in Pixeln public void drawRect int x int y int width int height Zeichnet im TheaterImage ein Oval in der aktuellen Zeichenfarb
135. n auch als Solist Simulator oder Solist IDE bezeichnet gestartet alternativ Eingabe des Befehls java jar solist jar in einer Konsole Beim ersten Start sucht Solist nach der JDK Installation auf Ihrem Computer Sollte diese nicht gefunden werden werden Sie aufgefordert den entsprechenden Pfad einzugeben Der Pfad wird anschlie end in einer Datei namens solist properties im Solist Ordner gespeichert wo er sp ter wieder ge ndert werden kann wenn Sie bspw eine aktuellere JDK Version auf Ihrem Rechner installieren sollten In der Property Datei k nnen Sie weiterhin die Sprache angeben mit der die Solist IDE arbeitet Aktuell wird allerdings nur deutsch unterst tzt 2 3 Materialien Der Solist Ordner enth lt folgende Unterordner und Dateien e handbuch Dieser Unterordner enth lt das Benutzungshandbuch von Solist im HTML und PDF Format e api Dieser Unterordner enth lt die Theater API im javadoc HTML Format e plays Dieser Uhnterordner enth lt die Solist beigef gten Beispiel Theaterst cke siehe auch Kapitel 10 Den Beispielen beigef gt sind auch die zugeh rigen Handb cher im MSWORD 2003 Format Wenn Sie eigene MPWs entwickeln und dazu Benutzungshandb cher erstellen wollen k nnen Sie gerne auf die bereits fertig gestellten Benutzungshandb cher zur ckgreifen e simulatoren Dieser Unterordner enth lt die generierten Simulatoren f r die Beispiel Theaterst cke e solist properties Diese Datei enth lt Properties
136. n dieser Box in das Uhnterverzeichnis Images des Beispiel Theaterst cks hamster selektieren Sie alle Dateien und Klicken Sie auf Selektieren Damit werden alle Bilder in das Unterverzeichnis Images unseres neuen Theaterst cks demo kopiert siehe auch Abbildung 7 4 48 Importieren Suchen in images a Sa B wi hamster png korn4 png Preview hamster24 png korns png hamsterkorn24 png korn6 png kachel jpg korn7 png korn png korn8 png korn1 png korn9 png korn10 png linksUm24 gif korn11 png loeschen24 gif korn12 png mauer png amp korn2 png mauer24 gif korn24 gif size24 gif korn3 png 24x24 0KB Dateiname 9 komsd png korn9 png IinksUm24 gif Ioeschen24 gif mauer png mauer24 gif size24 gif Dateityp Bilder pg gif png bmp v Importieren Abbrechen Abb 7 4 Importieren von Bildern Nach dem Abspeichern der ge nderten Klasse Territorium erscheint der Compilieren Button rot Das deutet daraufhin dass sich eine Klasse ge ndert hat und compiliert werden muss Klicken Sie den Button an Wenn Sie sich nicht vertippt haben und die Klasse fehlerfrei ist erscheint nun das in Abbildung 7 5 skizzierte Territorium Miniwelt Medien Programm B hne Simulation Fenster Hilfe Rs BI S 7 Elclasses Stage DI Territorium gt E Actor e cPro
137. n oder welche Komponenten genauer gesagt deren Icons sich ber hren oder berlappen Die Klasse Stage implementiert das Interface PixelArea und kann damit unmittelbar selbst in die Kollisionserkennung mit einbezogen werden author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 public class Stage implements PixelArea Serializable ber den Konstruktor wird die Gr e der B hne festgelegt Eine B hne besteht dabei aus einem rechteckigen Gebiet das sich aus gleichf rmigen quadratischen Zellen zusammensetzt param noOfCols Anzahl der Spalten der B hne param noOfRows A Anzahl der Reihen der B hn 92 param 87 public Sta Liefert return X7 public int cellSize Gr e einer Zelle in Pixeln ge int noOfCols int noOfRows int cellSize die Anzahl an Spalten der B hne die Anzahl an Spalten der B hne getNumberOfColunmns Liefert die Anzahl an Reihen der B hn return die Anzahl an Reihen der B hn RI public int getNumberOfRows Liefert die Gr e der Zellen der B hne in Pixeln return die Gr e der Zellen der B hne in Pixeln y public int getCellSize ndert die Gr e der B hn param noOfCols x Anzahl an Spalten param noOfRows u Anzahl an Reihen Ej publi
138. nd dabei Kleebl tter fressen und Pilze verschieben lassen Durch dieses Theaterst ck wird die Umsetzung eher objektbasierter Solist Programme siehe Abschnitt 7 11 demonstriert Solist Kara Simulator 10 4 Theaterst ck frosch Ein dem Hamster Modell hnliches Modell bei dem ein Frosch bers Gras h pfen und durchs Wasser schwimmen muss 139 Frosch Simulator Das frosch Theaterst ck zeigt sch n wie einfach es ist das urspr ngliche hamster Theaterst ck an geringf gig ge nderte Anforderungen anzupassen 10 5 Theaterst ck turtle Der MPW Klassiker Steuern Sie eine Schildkr te ber ein virtuelles Zeichenblatt und lassen sie sch ne Zeichnungen anfertigen Turtle Programme dienen insbesondere dazu beim Zeichnen so genannter Fraktale den Einsatz von Rekursion zu verdeutlichen Turtle Simulator Das turtle Theaterst ck demonstriert unter anderem den Einsatz der Klasse Theaterlmage 10 6 Theaterst ck geisterstunde Eine PLU f r wirkliche Programmieranf nger Programmieranf nger m ssen Programme schreiben in denen sie ein M dchen zu einem K rbis steuern Doch Vorsicht Es ist Halloween und unsichtbare Geister sind unterwegs 140 Geisterstunde Simulator 10 7 Theaterst ck gameoflife Das Theaterst ck gameoflife setzt das bekannte Game of Life System um Programmieranf nger m ssen ein Programm entwickeln das das Game of Life simuliert Dabei m ssen sie Arrays einsetzen
139. nen Gr e neu aufgebaut Was bei einem Aktionsbutton des Typs ActionHandler passiert ist letztendlich folgendes Wird ein solcher Button angeklickt wird die Methode handleAction aufgerufen der die aktuelle B hne und der aktuelle Solist als Parameter bergeben werden Durch die Methode muss dann die gew nschte Funktionalit t implementiert werden Definieren Sie nun zum Selbsttest einen weiteren Aktionsbutton mit dem Namen LinksUm vom Typ ActionHandler ordnen ihm das Bild linksUm24 gif und den Tooltip drehe den Hamster um 90 Grad nach links zu und ndern Sie im Editor die Klasse wie folgt ab import theater public class LinksUm extends ActionHandler public void handleAction Stage stage Actor solist Hamster solist linksUm Wenn der Benutzer diesen Button anklickt dreht sich der Hamster um 90 Grad nach links Die Reihenfolge Ihrer Aktionsbuttons in der Toolbar k nnen Sie brigens ver ndern Aktivieren Sie dazu das Popup Men eines Aktionsbuttons und w hlen ber das Item Verschieben aus ob der Button nach links oder rechts verschoben werden soll Ordnen Sie die Aktionsbutton nun so an wie in Abbildung 7 21 skizziert wird 75 Solist demo Miniwelt Medien Programm B hne Simulation Fenster Hilfe DI Classes EI Stage EA Territorium E Actor Hamster c Prop R Mauer CI Performance A Perfl Der Hanster steht mit Blickric
140. nenten in unserem Fall Mauern auf der B hne platzieren Um nicht f r jedes Platzieren einer Mauer erneut den Neue Mauer erzeugen Aktionsbutton anklicken zu m ssen k nnen Sie auch folgendes tun Dr cken Sie die Shift Taste der Tastatur und Klicken bei gedr ckter Shift Taste den Aktionsbutton an Solange Sie nun die Shift Taste gedr ckt halten k nnen Sie durch Anklicken einer Kachel des Hamster Territoriums dort eine Mauer platzieren Aktionsbutton vom Typ NewPropHandler besitzen immer automatisch diese sehr sinnvolle Funktionalit t 7 8 2 ClickHandler Als n chstes legen wir einen neuen Aktionsbutton vom Typ ClickHandler an Mit diesem wollen wir erreichen dass der Benutzer Mauern im Territorium l schen kann Aktivieren Sie dazu bitte im Men Miniwelt das Item Neuer Aktionsbutton und geben Sie in der erscheinenden Dialogbox den Namen MauernLoeschen an und w hlen Sie den Typ ClickHandler aus Klicken Sie dann auf den OK Button In der Toolbar erscheint ganz rechts ein neuer Button Ordnen Sie diesem zun chst das Ikon Ioeschen24 gif und den Tooltip Text Mauern l schen zu ffnen Sie dann den Editor Er enth lt folgenden Text import theater import java util List public class MauernLoeschen extends ClickHandler 71 public void handleClick Stage stage Actor solist int col int row List lt Component gt clickedComponents Die Methode handleClick ist noch leer F gen
141. ng aktiv ist lassen sich Komponenten durch Anklicken mit der Maus beliebig auf der B hne verschieben Auch ist es m glich f r jede Komponente ein Popup Menu zu aktivieren In diesem Popup Menu erscheinen alle Methoden der entsprechenden Klasse und k nnen interaktiv f r das entsprechende Objekt ausgef hrt werden 5 5 Meldungsbereich Im Meldungsbereich werden wichtige Hinweise und Fehlermeldungen bei der Benutzung des Simulators ausgegeben Die Ausgaben im Meldungsbereich verschwinden nach einer gewissen Zeitspanne wieder 5 6 Editorbereich Im Editorbereich des Hauptfensters der so genannte Solist Editor k nnen auf der Grundlage der in der aktuellen Solist Klasse definierten Befehle Testprogramme entwickelt werden 34 5 7 Editor Fenster Nach dem Doppelklick auf den Namen einer Klasse im Klassenbereich ffnet sich ein Editor Fenster mit der entsprechenden Klassendefinition Im Editor kann die entsprechende Klasse editiert werden Abbildung 5 11 skizziert den Aufbau des Editors In der Titelzeile erscheint der Name der Datei Ein Sternchen hinter dem Namen deutet an dass nderungen im Sourcecode vorgenommen die Datei aber noch nicht abgespeichert worden ist Unter der Titelzeile befindet sich die Men leiste mit den Men s Datei Bearbeiten und Format siehe Abbildungen 5 12 5 13 und 5 14 Die wichtigsten Funktionalit ten des Editors sind ber die Toolbar per Mausklick aktivierbar Im Programmbereich unter der Toolb
142. nn 145 Sie eigene Theaterst cke entwickelt haben k nnen Sie mir diese auch gerne zukommen lassen so dass ich sie wenn Sie w nschen ebenfalls auf der Solist Website anderen Solist Nutzern zug nglich mache 146
143. nstruktor der Klasse Items der Form new lt Konstruktor gt Hier ber ist es m glich interaktiv neue Objekte der entsprechenden Klassen zu erzeugen 33 Nach der Ausf hrung eines new Items f r eine B hnenklasse wird der entsprechende Konstruktor ausgef hrt und unter Umst nden eine neue B hne in den B hnenbereich geladen Hinweis In der aktuellen Version wird nur der Default Konstruktor unterst tzt der unbedingt vorhanden und als public definiert sein muss Nach der Ausf hrung eines new Items f r eine Prop Klasse wird ein Objekt der entsprechenden Klasse erzeugt Aufruf des Default Konstruktors der Klasse Durch Klicken mit der Maus auf die B hne wird die Komponente an der entsprechenden Stelle auf die B hne platziert In Solist ist es m glich f r ein Theaterst ck mehrere B hnen mehrere Actor Klassen und mehrere Auff hrungen zu definieren Die aktive B hne die aktive Actor Klasse auch als Solist Klasse bezeichnet bzw die aktive Auff hrung l sst sich durch Mausklick auf die entsprechende Klasse ausw hlen Man erkennt sie an einer roten Umrandung des jeweiligen Klassen Ikons im Klassenbaum Nach Wechsel der aktiven B hnenklasse wird unmittelbar der Default Konstruktor der neuen aktiven Klasse ausgef hrt und die neue B hne im B hnenbereich angezeigt 5 4 B hnenbereich Im B hnenbereich wird die aktuell aktive B hne angezeigt Hier agiert w hrend einer Auff hrung der Solist Wenn keine Auff hru
144. nten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event public void mouseDragged MouseInfo e HH R S E E E a Wird aufgerufen wenn ein mouseMoved Event auf der Komponent ingetreten ist d h die Maus bewegt wurde w hrend sich der Mauszeiger auf dem Icon der Komponente befindet Soll eine Komponente auf mouseMoved Events reagieren muss sie diese Method ntsprechend berschreiben Genauer Informationen zu mouseMoved Events finden sich in der Klasse java awt event MouseMotionListener bergeben wird der Methode ein 109 HH HH HOHH3 HOHO3 HH NH HH HH 7 public void mouseMoved Mouselnfo e HH HH HHH HHKH HH HOHULITO3HOA LNO3H IHK HH 5 public void mouseEntered Mouselnfo e HH HH FO HO3H3H3 H H OH NO HH HH HH MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf mouseMoved Events reagieren Die Reihenfolge in der eine
145. ntiert werden public Hamster super nicht loeschen setImage hamster pngq hiermit wird dem Solist der Name willi gegeben willi Solist this weitere Initialisierungen blickrichtung 0 Default Osten Copy Konstruktor muss implementiert werden public Hamster Hamster actor super actor nicht loeschen hiermit wird dem Solist der Name willi gegeben willi Solist this weitere Initialisierungen blickrichtung actor blickrichtung Description Der Hamster dreht sich um 90 Grad nach links um public void linksUm this blickrichtung this blickrichtung 1 4 this setRotation this getRotation 90 50 Drei Dinge sind hierbei zu erw hnen Zum einen ordnen wir dem Hamster ein Bild zu hamster png und zum anderen geben wir ihm den Namen willi ber den wir ihn hinterher in Solist Programmen ansprechen k nnen Weiterhin definieren wir den zun chst einzigen Hamster Befehl linksUm in der entsprechenden Methode Achten Sie bitte darauf dass in Actor Klassen immer ein Default und ein Copy Konstruktor in der oben skizzierten Art und Weise implementiert werden m ssen Nach dem Compilieren erscheint das Hauptfenster in der in Abbildung 7 7 skizzierten Form Miniwelt Medien Programm B hne Simulation Fenster Hilfe Bla Bo 8 x nla d main Abb 7 7 Ge nderte Hamster Klasse Aktivieren Sie nun
146. oberhalb des Hamster Ikons auf der B hne ein Popup Men und w hlen Sie im Untermen Hamster den Eintrag linksUm aus siehe Abbildung 7 8 Der Hamster dreht sich um 90 Grad nach links M voidlinksum theater Actor gt theater Component gt Der Hamster dreht sich um 90 Grad nach links um I java lang Object gt giie void main Abb 7 8 Hamster Popup Men Alternativ k nnen Sie auch ber das Men Fenster das Befehlsfenster ffnen Hierin erscheint ebenfalls der Befehl linksUm siehe Abb 7 9 Bei jedem Anklicken dreht sich der Hamster um 90 Grad nach links Achten Sie darauf dass wenn Sie mit der Maus etwas l nger ber dem ltem linksUm verweilen ein Tooltip erscheint Dieser enth lt die Beschreibung die wir bei der Definition der Methode linksUm in der Klasse Hamster in der Annotation Description angegeben haben 51 B OOR Der Hamster dreht sich um 90 Grad nach links um Abb 7 9 Das Befehlsfenster Per Drag and Drop ber das Hamster Ikon k nnen Sie den Hamster auch auf andere Kacheln verschieben und Sie k nnen auch andere geerbte Befehle ber das Popup Men aufrufen brigens k nnen wir nun auch bereits unser erstes Hamster Programm schreiben und ausf hren Geben Sie dazu im Solist Editor des Hauptfensters folgendes Solist Programm ein void main for int i 0 i lt 10 i lin
147. onenten Kapitel 6 anschlie end der Theater APl die berblicksartig vorgestellt wird In Kapitel 7 geht es dann ins Detail In diesem Kapitel werden die einzelnen Schritte beim Arbeiten mit Solist dadurch erl utert dass inkrementell eine kleine Demo MPW umgesetzt und daraus letztendlich ein Demo Simulator generiert wird Kapitel 8 enth lt einige n tzliche Tipps und Tricks f r den Umgang mit Solist Kapitel 9 ist ein Referenzhandbuch in dem alle Klassen der Theater APIl und deren Methoden ausf hrlich beschrieben werden Letztendlich werden in Kapitel 10 die Theaterst cke kurz vorgestellt die standardm ig Solist als Beispiele und Anregungen f r eigene MPWs beigef gt sind 2 Installation 2 1 Voraussetzungen Voraussetzung zum Starten von Solist ist ein Java Development Kit SE JDK der Version 6 oder h her Ein Java Runtime Environment SE JRE reicht nicht aus Das jeweils aktuelle JDK kann ber die Website http www oracle com technetwork java javase downloads index html bezogen werden und muss anschlie end installiert werden 2 2 Download Installation und Start Solist hat eine eigene Website http www programmierkurs java de solist Von dieser Website muss eine Datei solist 2 1 zip herunter geladen und entpackt werden Es entsteht ein Ordner namens solist 2 1 der so genannte Solist Ordner in dem sich eine Datei solist jar befindet Durch Doppelklick auf diese Datei wird die Solist Entwicklungsumgebung im Folgende
148. onents Class lt gt classes Liefert eine Liste mit allen Komponenten bestimmter Klassen die aktuell auf einer bestimmten Zelle der B hne platziert sind Werden keine 95 Klassenobjekte bergeben so werden alle B hnen Komponenten auf der entsprechenden Zelle geliefert param column Spalte der Zelle param row x Reihe der Zell param classes x Menge von Klassen die bei der Suche ber cksichtigt werden sollen return Liste mit allen B hnen Komponenten bestimmter Klassen auf der A angegebenen Zell public List lt Component gt getComponentsAt int column int row Class lt gt classes Liefert eine Liste mit allen Komponenten bestimmter Klassen deren zugeordnetes Icon vollst ndig innerhalb einer bestimmten PixelArea liegt Werden keine Klassenobjekte bergeben so werden alle B hnen Komponenten innerhalb der PixelArea geliefert param area x das Gebiet in dem die Komponenten liegen sollen darf nicht 3 null sein param classes x Menge von Klassen die bei der Suche ber cksichtigt werden x sollen return Liste mit allen B hnen Komponenten bestimmter Klassen innerhalb i der angegebenen PixelArea a public List lt Component gt getComponentsInside PixelArea area Class lt gt classes Liefert eine Liste mit allen Komponenten bestimmter Klassen deren
149. op Objekt erzeugt und auf der B hne platziert werden soll x author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 A public abstract class NewPropHandler Liefert das neu erzeugt Prop Objekt Die berschriebene Methode wird aufgerufen wenn der Benutzer den Aktionsbutton anklickt x return 7 public abstract Prop newProp 9 8 Annotationen 9 8 1 Description package theater Beschreibung f r eine Methode oder ein Attribut die als Tooltip eines Befehls im Befehlsfenster erscheinen sollen Hr r Hr author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 xy Documented Target ElementType METHOD ElementType FIELD Retention RetentionPolicy RUNTIME public interface Description String value 9 8 2 Invisible package theater 136 Hr RR Eine Actor oder Prop Methode die als Invisible deklariert ist im Popup Menu der Komponente und auch nicht im Befehlsfenster angezeigt wird nicht author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 8 Documented Target Retention RetentionPolicy RUNTIME ElementType METHOD ElementType CONSTRUCTOR Di public interface Invisible 137 10 Beispiel Theaterst cke Die folgenden Theaterst cke dienen als Beispiele f r den Einsatz von Solist Sie
150. p gt C Pertormance C3 Other Abb 7 5 Ge ndertes Territorium 7 1 2 Definition einer neuen Actor Klasse Nun wollen wir eine neue Actor Klasse definieren in der unser Solist ein Hamster implementiert wird Dazu aktivieren wir im Klassenbereich auf dem Ordner Actor ein Popup Men w hlen das Item Neue Unterklasse und geben in der erscheinenden Dialogbox den Namen Hamster ein Nach dem Dr cken des OK Buttons erscheint im Ordner Actor die Klasse Hamster Durch Doppelklick ffnen wir den Editor der Klasse Hamster Er hat die in Abbildung 7 6 skizzierte Gestalt 49 demo Hamster java TE a 8 8 1 import theater public class Hanster extends Actor hiernit kann struktoren karl maria etc super nicht loeschen hiermit kann dem Solist ein Name gegeben werden s Solist this weitere Initialisierungen Copy Konstruktor muss implementiert werden public Hamster Hamster actor super actor nicht loeschen hiermit kann dem Solist ein Name gegeben werden solist_name Solist this weitere Initialisierungen Abb 7 6 Editor der Actor Klasse Hamster ndern und speichern Sie nun den Inhalt der Klasse Hamster wie folgt ab import theater public class Hamster extends Actor protected Solist willi protected int blickrichtung Default Konstruktor muss impleme
151. ponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event z public void mouseClicked Mouselnfo e HR HORROR o a e e o e HH NH HOF HH NH Wird aufgerufen wenn ein mouseDragged Event auf der B hn ingetreten ist d h die Maus bei gedr ckter Maustaste bewegt wurde w hrend sich der Mauszeiger oberhalb der B hne befindet Soll eine B hne auf mouseDragged Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu mouseDragged Events finden sich in der Klasse java awt event MouseMotionListener bergeben wird der Methode ein MouseInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf mouseDragged Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden
152. prechenden Handler Methode definiert und die Tastatur Event Benachrichtigung aktiviert haben F r die Reihenfolge der Benachrichtigung gilt Je weiter das Objekt auf der B hne im Vordergrund ist desto eher wird es informiert Die B hne wird als letzte informiert Das KeyInfo Objekt das dabei den Methoden bergeben wird ist dabei immer das gleiche ber die Method setUserObject bekommen die Komponenten die M glichkeit zu kommunizieren indem sie dem KeyInfo Objekt ein anwendungsspezifisches Objekt zuzuordnen das sp ter benachrichtigte Objekte ber die Method getUserObject abfragen k nnen return das dem KeyInfo Objekt mittels der Methode setUserObject ns zugeordnete Objekt oder null falls kein Objekt zugeordnet wurd Ez public Object getUserObject berschreibt die geerbte Methode und liefert im Falle eines Aufrufs eine RuntimeException da ein Zugriff auf die Theater intern Java AWT Komponente nicht erlaubt ist return wirft immer eine RuntimeException throws RuntimeException i wird bei jedem Aufruf der Methode geworfen see java awt event ComponentEvent getComponent 09 public java awt Component getComponents throws RuntimeException 9 5 2 Mouselnfo package theater 123 Sowohl die Klasse Stage als auch die Klasse Component definieren
153. rabe des Compilier Buttons verschwindet ffnen Sie nun einmal ber das Men Fenster das Befehlsfenster Neben den in der Klasse Hamster definierten Befehlen erscheinen dort auch alle in Ihrem Solist Programm definierten Prozeduren und Funktionen siehe auch Abbildung 7 12 F r das Verwalten und Editieren von Programmen ist das Men Programm wichtig Unterhalb der Men leiste ist eine spezielle Toolbar zu sehen ber die Sie die wichtigsten Funktionen der Men s auch schneller erreichen und ausf hren k nnen Schieben Sie einfach mal die Maus ber die Buttons Dann erscheint jeweils ein Tooltipp der die Funktionalit t des Buttons anzeigt Die f r das Editieren von Programmen wichtigen Buttons der Toolbar werden in Abbildung 7 13 skizziert Drucken Kopieren R ckg ngig l N l a xnle gt t t Ausschneiden Einf gen Wiederherstellen Abb 7 13 Editor Buttons der Toolbar 7 2 1 Schreiben eines neuen Solist Programms Das Schreiben eines neuen Solist Programms ist durch das entsprechende Eintippen des Sourcecodes im Editor Bereich m glich 7 2 2 ndern des aktuellen Solist Programms M chten Sie Teile des aktuellen Solist Programms ndern klicken Sie im Editor Bereich einfach an die entsprechende Stelle und f gen dort die entsprechenden W rter ein oder l schen sie 7 2 3 L schen des aktuellen Solist Programm Komplett l schen k nnen Sie das aktuelle Solist Programm des Editor Bereichs indem Sie den komp
154. rechtsUm Abb 7 15 Befehlsfenster 7 5 1 Befehlsfenster Im Befehlsfenster werden die von Ihnen definierten Solist Befehle mit orangenem Hintergrund sowie die Prozeduren und Funktionen dargestellt die im aktuellen Soliost Programm beim letztmaligen erfolgreichen Compilieren definiert waren mit gr nlichem Hintergrund Beim Anklicken mit der Maus werden die entsprechenden Befehle jeweils ausgef hrt Die Ausf hrung erfolgt dabei ohne Anzeige von Zwischenzust nden D h wird bspw eine Prozedur rechtsUm dadurch definiert dass dreimal der Befehl linksUm 63 aufgerufen wird und wird diese Prozedur rechtsUm im Befehlsfenster aktiviert dreht sich der Hamster tats chlich nur einmal um 90 Grad nach rechts Dauert die Ausf hrung eines Befehls mehr als 5 Sekunden vermutlich enth lt dann die Funktion eine Endlosschleife wird der Befehl abgebrochen und der Solist Simulator wird komplett auf seinen Startzustand zur ckgesetzt 7 5 2 Parameter Besitzt eine Prozedur oder Funktion Parameter erscheint nach ihrer Aktivierung im Befehlsfenster eine Dialogbox in der die entsprechenden aktuellen Parameterwerte eingegeben werden m ssen Hinweis Aktuell wird nur die Eingabe von Werten der Java Standard Datentypen int boolean float sowie die Eingabe von Zeichenketten Strings unterst tzt 7 5 3 R ckgabewerte von Funktionen Bei der Ausf hrung von Funktionen wird der jeweils gelieferte Wert in einem Dialogfenster darges
155. rface PixelArea Bez glich der Klasse Stage wird dabei der sichtbare Bereich als PixelArea angesehen Bei Komponenten d h Akteure und Requisiten repr sentiert das ihnen zugeordnete Ikon die PixelArea Durch das Konzept der PixelArea ist eine Kollisionserkennung sehr flexibel ohne eine gr ere Menge an Methoden realisierbar So kann sehr einfach abgefragt werden ob sich bspw zwei Akteure berlagern oder ob sich ein Akteur komplett im sichtbaren Bereich der B hne befindet Bei Bedarf kann ein Programmierer weitere Klassen definieren bspw Kreise oder Polygone die das Interface PixelArea implementieren womit sich dann ohne weitere nderungen berpr fen lie e ob sich bspw der Solist in einem bestimmten durch ein Polygon definierten Bereich der B hne aufh lt 45 7 Entwicklungsfunktionalit ten im Detail Als Hauptfunktionsbereiche des Solist Simulators lassen sich identifizieren Anlegen und Verwalten von Klassen Verwalten und Editieren von Solist Programmen Compilieren Gestalten und Verwalten der B hne Interaktives Ausf hren von Solist Befehlen Ausf hren von Solist Programmen Debuggen von Solist Programmen Anlegen und Verwalten von Aktionsbuttons Generieren einer PLU Wir werden uns die einzelnen Funktionsbereiche nun im Detail anschauen und dabei unsere erste kleine MPW realisieren ein ganz einfacher Hamster Simulator der einen Teil des Java Hamster Modells umsetzt Starten Sie dazu Solist und erzeugen Sie durch
156. rfehler bestehen e Informationen Button zum Editieren bzw Abrufen genereller Informationen zum Theaterst ck Beim Anklicken des Buttons ffnet sich ein Fenster in dem Informationen zum Theaterst ck Entwickler Version Anleitung eingegeben bzw abgerufen werden k nnen e Drucken Button zum Drucken des sich aktuell im Solist Editor befindlichen Programms e Ausschneiden Kopieren Einf gen R ckg ngig Wiederherstellen G ngige Editor Funktionen f r den Solist Editor 32 e Start Fortsetzen Steuerungsbutton zum Starten einer Auff hrung des Theaterst cks Beim Anklicken des Buttons wird eine Auff hrung gestartet oder fortgesetzt falls sie pausiert war e Schrittweise Ausf hrung Ausf hrung der n chsten Anweisung e Pause Steuerungsbutton zum Pausieren einer Auff hrung Beim Anklicken des Buttons wird eine laufende Auff hrung pausiert bzw angehalten Durch anschlie endes Klicken auf den Start Fortsetzen oder den Schrittweise Ausf hrung Button kann sie anschlie end wieder fortgesetzt werden e Stopp Steuerungsbutton zum Stoppen einer Auff hrung Beim Anklicken des Buttons wird eine Auff hrung endg ltig gestoppt e Zur cksetzen Setzt eine Auff hrung zur ck auf den Zustand den sie beim letztmaligen Starten innehatte e Komplett zur cksetzen Steuerungsbutton zum Zur cksetzen einer Auff hrung Beim Anklicken dieses Buttons wird das Theaterst ck in seinen Ausgangszustand zur ckgesetzt also kompl
157. rieren einer Programmierlernumgebung 4 44s4s4444 nenn 22 4 gt Gr ndlagenssssssss eher 25 4 1 Theaterst cke bzw Miniwelten 222444000000444nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 25 227 BUNNEN este ee ee ee ee 25 4 3 AKUTE anna anne 26 4 4 Requisiten 2224444400nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 26 4 5 AUTUNEBNGERE anreisen 27 4 6 HIISKIASSEN ensure enenee 27 9 Solist Simulator Eredar een aa ernten ea erkennen 28 9 1 MEehls a2 e a a aa aaa o a E rara aa E aaar rE aa EE iaaa TE 29 52 T olbar sinita a aa i esse selig 32 9 3 Klassenberelchiessasises een 33 5 4 B hnenbereich usa een 34 5 5 Meldungsbereich u 3 2 222 ea 34 5 6 Edii rbereich HA enegaheerenee 34 3 2 Editor Fenstern orete a a ee ee 35 6 TNealsFAplee a a a 37 Bl Stage re ER E E re 37 6 1 1 Gestaltungsmethoden uuus44444nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 38 6 1 2 Geier MEINOGON ee ee eeeee 38 6 1 3 Kollisionserkennungsmethoden 242444444000nnnnnnnnnnnnnnnnannnnnnnnnnnn 38 6 1 4 Event Methoden 0 22u22uannnensnnnnnnnnannennnannnnnnnnnnnnnnnnnennnnnnnnnnnn 39 6 2 Component Actor und Pro 2u222 Heer 39 6 2 1 Manipulatisnsmelhodenz a rasanten 40 9 2 2 Getter Melh denz 2 5 3 40 6 2 3 Kollisionserkennungsmethoden 224444444444Hnnnnnn nen nnnnnnnnnnnnnnnnnnn 40 6 2 4 Event
158. s und Tricks vorgestellt Weitere Tipps und Tricks entnehmen Sie bitte den Beispielen in Kapitel 10 8 1 addedToStage Wenn Sie eine Komponente Actor oder Prop erzeugen wird sein Konstruktor aufgerufen Normalerweise erfolgt in einem Konstruktor eine Initialisierung eines Objektes Bestimmte geerbte Methoden einer Komponente k nnen jedoch nicht bereits im Konstruktor sondern erst nach der Platzierung der Komponente auf der B hne aufgerufen werden getRow getColumn setLocation Um derartige Initialisierungen trotzdem durchf hren zu k nnen wird nach der Platzierung einer Komponente auf der B hne via einer der add Methoden der Klasse Stage die Methode public void addedToStage Stage stage aufgerufen und ihr als Parameter eine Referenz auf die entsprechende B hne bergeben berschreiben Sie also gegebenenfalls diese Methode und f hren Sie entsprechende Initialisierungen innerhalb dieser Methode durch M chte bspw ein Programmierer erreichen dass eine Komponente unabh ngig davon wohin sie der Benutzer platzieren will zu Anfang immer in die linke obere Ecke der B hne platziert wird kann er dies auf folgende Art und Weise erreichen import theater public class Dummy extends Prop public Dummy setLocation 0 0 hier nicht erlaubt Override public void addedToStage Stage stage setLocation 0 0 8 2 setLocation Der in Kapitel 7 entwickelte Demo Hamster Simulator enth lt noch einige unsc
159. schaulichen hanoi Simulator In diesem Theaterst ck wird insbesondere demonstriert wie man in Solist Animationen realisieren kann 143 10 12Theaterst ck tictactoe Das Theaterst ck tictactoe erm glicht Programme zu entwickeln die gegen Menschen und oder andere Programme das bekannte Spiel TicTacToe spielen tictactoe Simulator In diesem Theaterst ck wird insbesondere demonstriert wie man in Solist Interaktionen mit dem Benutzer realisieren kann Das Theaterst ck kann auch als Ausgangspunkt f r die Umsetzung anderer 2 Personen Strategiespiele Schach Reversi 4 Gewinnt genutzt werden 10 13Theaterst ck terminal Das Theaterst ck terminal simuliert ein ASCIl Terminal auf das Daten via System out ausgegeben und Daten vom Benutzer abgefragt via System in werden k nnen 144 terminal Simulator In diesem Theaterst ck wird demonstriert wie man in Solist Interaktionen mit dem Benutzer realisieren kann 10 14 Theaterst ck fruechte Das Theaterst ck fruechte erm glicht Programme zu entwickeln die ein gegebenes Optimierungsproblem l sen Programme steuern einen Einkaufswagen und m ssen dabei m glichst viele vom Himmel fallende Fr chte einfangen ag 69 P F 4 S 3 a fruechte Simulator 10 15Weitere Theaterst cke Es werden regelm ig neue Theaterst cke von mir entwickelt Diese k nnen Sie von der Solist Website http www programmierkurs java de solist herunterladen We
160. seitigen Um ganz sicher zu sein dass keine Synchronisationsfehler auftreten k nnen sollten Sie also jede von au en aufrufbare Methode Ihrer Klassen in entsprechende lock unlock Aufrufe einschlie en und zwar auf folgende Art und Weise public void methode Performance getPerformance lock try finally Performance getPerformance unlock Schauen wir uns das mal konkret am Fall der Methode inksUm der Klasse Hamster an Description Der Hamster dreht sich um 90 Grad nach links um public void linksUm Performance getPerformance lock try this blickrichtung this blickrichtung 1 4 this setRotation this getRotation 90 finally Performance getPerformance unlock Durch Einsatz des Locks ist es hier sichergestellt dass die Blickrichtung und Rotation des Hamsters sich immer in einem konsistenten Zustand befinden Die Verwendung eines try finally Konstruktes sorgt daf r dass f r jeden Aufruf der lock Methode auch auf jeden Fall die unlock Methode aufgerufen wird auch wenn irgendwelche Laufzeitfehler auftreten sollten Ansonsten k nnte es zu unfreiwilligen Blockaden kommen Hinweis Die Aufrufe der Methoden der Aktionsbutton Klassen werden automatisch intern gelockt Diese brauchen also nicht explizit von Ihnen gelockt zu werden 8 4 Einfrieren Stellen Sie sich vor Sie definieren in der Klasse Hamster folgende Methode umdrehen 89 Description
161. side PixelArea area berpr ft ob die B hn ine angegebene PixelArea ber hrt oder schneidet param area das Gebiet das berpr ft werden soll darf nicht null sein return true falls die B hne die angegebenen PixelArea ber hrt oder schneidet s theater PixelArea intersects theater PixelArea lic boolean intersects PixelArea area Legt fest ob die B hne Tastatur Ereignisse behandeln soll Standardm ig ist dies in Solist nicht der Fall param handlingKeyEvents true falls die B hne Tastatur Ereignisse behandeln soll false andernfalls lic void setHandlingKeyEvents boolean handlingKeyEvents berpr ft ob die B hne Tastatur Ereignisse behandelt Standardm ig ist dies in Solist nicht der Fall return true falls die B hne Tastatur Ereignisse behandelt public boolean isHandlingKeyEvents HH HH HO3HH HO HO HO HH HH HH OHIO HH Wird aufgerufen wenn w hrend die B hne den Focus besitzt ein keyTyped Event eingetreten ist Soll eine B hne auf keyTyped Events reagieren muss sie dies thod ntsprechend berschreiben Genauer Informationen zu keyTyped Events finden sich in der Klasse java awt event KeyListener bergeben wird der Methode ein KeyInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingKeyEvents Status gesetzt ist was standar
162. spiel Theaterst cke uuuuunssnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 138 10 1 Theaterst ck demo und oodemo sssssssssrrrrsesssesrrrrnrrrnsserrrrrnnnneeeeee 138 10 2 Theaterst ck hamster seeessessennenereeseerrrrnnnrnressrrrrnnnrnnsserrnnnnnnnneeeet 138 10 3 Theaterst ck kara uuuusessnnsnsnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 139 10 4 Theaterst ck froSch sssssseeessssesnrnnrressesrerrrnrnnrnssrrrrrnnnnnnnserrrnnnnnnnnnenet 139 10 5 Theaterst ck turtle nnsnnnneeeeeeeneennnnnnneeseertrnrrnnrrnsserrrrrnnnnnnserrrnnnnnnnneneet 140 10 6 Theaterst ck geisterstunde uu 444444444400nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 140 10 7 Theaterst ck gameoflife u u u4 4 4 HB 40H RR 141 10 8 Theaterst ck sudoku 24244444400nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 141 10 9 Theaterst ck damen 142 10 10 Theaterst ck Springer en 142 10 11 Theaterst ck handle ars rear 143 10 12 Theaterst ck tictactoe 222444400unnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 144 10 13 Theaterstuckterminal a een area Ener 144 10 14 Theaterst ck fruechte uuuu444nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 145 10 15 Weitere Theaterst cke 22224400000n444nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 145 1 Einleitung Solist ist eine spezielle Entwicklungsumgebung
163. sse zur Definition einer Auff hrung Theaterlmage und Theaterlcon Klassen zum Erzeugen und Manipulieren von Bildern und Icons Mouselnfo Klasse die Informationen zu Maus Ereignissen verwaltet Keyinfo Klasse die Informationen zu Tastatur Ereignissen verwaltet PixelArea Interface zur Umsetzung der Kollisionsentdeckung Rectangle Klasse die das Interface PixelArea f r rechteckige Gebiete implementiert Point Klasse die das Interface PixelArea f r einzelne Pixel implementiert e Cell Klasse die das Interface PixelArea f r einzelne Zellen einer B hne implementiert e CellArea Klasse die das Interface PixelArea f r rechteckige Gebiete mit mehreren Zellen einer B hne implementiert 6 1 Stage Die Gestaltung einer konkreten B hne kann durch die Definition einer von der Klasse Stage abgeleiteten Klasse erfolgen Eine B hne besteht dabei aus einem rechteckigen Gebiet das sich aus gleichf rmigen quadratischen Zellen zusammensetzt Die Gr e der B hne wird ber einen Konstruktor durch die Anzahl an Spalten und Reihen sowie die Gr e der Zellen in Pixeln festgelegt Hierdurch wird ein Koordinatensystem definiert das zum Platzieren von Komponenten d h Akteuren und Requisiten auf der B hne dient Das Koordinatensystem ist nicht endlich so dass sich Akteure und Requisiten auch au erhalb der B hne befinden k nnen also zwischenzeitlich nicht sichtbar sind Der Gr e der B hne l sst sich sp ter auch noch ndern
164. t lt p gt lt p gt Der Konstruktor wird Theater intern aufgerufen param e ia das eingetretene KeyEvent I public KeyInfo java awt event KeyEvent e 122 berschreibt die geerbte Methode und liefert das aktuelle Stage Objekt return das aktuelle Stage Objekt see java util EventObject getSource y public Object getSource Tritt ein Tastatur Event ein so werden alle Komponenten und die B hne dar ber informiert insofern si in ntsprechenden Handler Methode definiert und die Tastatur Event Benachrichtigung aktiviert haben F r die Reihenfolge der Benachrichtigung gilt Je weiter das Objekt auf der B hne im Vordergrund ist desto eher wird es informiert Die B hne wird als letzte informiert Das KeyInfo Objekt das dabei den Methoden bergeben wird ist dabei immer das gleiche ber die Method setUserObject bekommen die Komponenten die M glichkeit zu kommunizieren indem sie dem KeyInfo Objekt ein anwendungsspezifisches Objekt zuzuordnen das sp ter benachrichtigte Objekte ber die Method getUserObject abfragen k nnen param userObject in beliebiges anwendungsspezifisches Objekt zy public void setUserObject Object userObject Tritt ein Tastatur Event ein so werden alle Komponenten und die B hne dar ber informiert insofern si in nts
165. t int BR public boolean contains int x int y berpr ft ob die aufgerufene Zelle innerhalb der als Parameter bergebenen PixelArea liegt param area x die zu vergleichende PixelArea return genau dann true wenn die aufgerufene Zelle innerhalb der als x Parameter bergebenen PixelArea liegt s theater PixelArea isInside theater PixelArea Sf public boolean isInside PixelArea area berpr ft ob die aufgerufene Zelle die als Parameter bergeben PixelArea schneidet param area x die zu vergleichende PixelArea return genau dann true wenn die aufgerufene Zelle die als Parameter bergebene PixelArea schneidet s theater PixelArea intersects theater PixelArea public boolean intersects PixelArea area Liefert die Spalte der Zell 132 return die Spalte der Zell y public int getCol Liefert die Reihe der Zell return die Reihe der Zell X7 public int getRow 9 6 5 CellArea package theater Die Klasse CellArea repr sentiert ein Menge von Zellen genauer ein rechteckiges Gebiet von Zellen der B hne Sie implementiert das Interface PixelArea so dass mit dieser Klasse Kollisionen von Zellen mit anderen Gebieten der B hne berpr ft werden k nnen author Dietrich Boles Universit t Oldenburg Germany version 1 0 03 11 2009 E public class C
166. tellt 7 5 4 Befehls Popup Men Alternativ zur Benutzung des Befehlsfensters ist es auch m glich ber ein Popup Men die Solist Befehle interaktiv auszuf hren Sie k nnen dieses Popup Men durch Dr cken der rechten Maustaste oberhalb des Solist Ikons im Territorium aktivieren siehe Abbildung 7 16 2 Hamster gt Zum theater Actor b theater Component gt Der Hamster dreht sich um 90 Grad nach links um java lang Object b void main Abb 7 16 Befehls Popup Men Auch f r Prop Komponenten ist es auf diese Art und Weise m glich deren Methoden auszuf hren In das Popup Men bzw Befehlsfenster aufgenommen werden dabei alle Methoden der entsprechenden Klasse selbst als private deklarierte Methoden M chten Sie dass eine bestimmte Methode nicht im Popup Men oder im Befehlsfenster erscheint m ssen Sie sie mit der Annotation Invisible aus dem Paket theater 64 markieren Probieren Sie dies einmal dadurch aus dass Sie im aktuellen Solist Programm die Methode kehrt entsprechend markieren theater Invisible void kehrt linksUm linksUm Nach dem Kompilieren erscheint diese Methode nun nicht mehr im Befehlsfenster und Popup Men des Hamsters 7 5 5 Klassen Popup Men Wenn Sie oberhalb einer Klasse im Klassenbereich ein Popup Men aktivieren werden dort die Konstruktoren der Klasse sowie alle static Methoden der Klasse aufgelistet Wenn Sie
167. terst ckes Toolbar Men leiste ea A HamsterEutepton amp MauLeerknepson A KarteiLeerEnerton A MauerDiaEntepten Meldungsbereich Solist Editor B hnenbereich Klassenbereich Abb 5 1 Aufbau des Solist Simulators Ganz oben befindet sich die Men leiste mit den sieben Men s Miniwelt Medien Programm B hne Simulation Fenster und Hilfe In der darunter liegenden Toolbar sind die wichtigsten Funktionalit ten des Simulators durch einen einzelnen Mausklick ausf hrbar Im mittleren Bereich sieht man links einen Editor der so genannte Solist Editor in dem Programme der entsprechende MPW eingegeben werden k nnen Rechts angeordnet ist der Klassenbereich in dem die existierenden Klassen des bearbeiteten Theaterst cks angezeigt werden In der Mitte des B hnenbereiches wird die aktuelle B hne angezeigt Ganz unten im Meldungsbereich werden Hinweise und Fehlermeldungen ausgegeben 28 5 1 Men s Die sieben Men s des Threadnocchio Hauptfensters stellen zahlreiche Funktionen zur Bearbeitung und Ausf hrung von Theaterst cken Verf gung Es sei jedoch anzumerken dass Sie die am h ufigsten benutzten Funktionen auch schnell und direkt ber entsprechende Buttons der Toolbar ausl sen k nnen siehe Abschnitt 5 2 ber das Men Miniwelt k nnen Sie neue Miniwelten bzw Theaterst cke erzeugen existierende Theaterst cke ffnen sowie die Bearbeitung des angezeigten Solist Theaterst cks beenden siehe Abbildung 4
168. throws IllegalStateException wird geworfen wenn die Komponente aktuell nicht auf einer B hne platziert ist public void setLocation int newCol int newRow throws IllegalStateException Liefert die Spalte in der sich die Komponente aktuell auf einer B hne befindet return die Spalte in der sich die Komponente aktuell auf einer B hne X befindet throws IllegalStateException wird geworfen wenn die Komponente aktuell nicht auf einer B hne platziert ist public int getColumn throws IllegalStateException Liefert die Reihe in der sich die Komponente aktuell auf einer B hne befindet return die Reihe in der sich die Komponente aktuell auf einer B hne X befindet throws IllegalStateException i wird geworfen wenn die Komponente aktuell nicht auf einer B hne platziert ist public int getRow throws IllegalStateException Liefert die Zelle in der sich die Komponente aktuell auf einer B hne befindet return die Zelle in der sich die Komponente aktuell auf einer B hne K befindet throws IllegalStateException x wird geworfen wenn die Komponente aktuell nicht auf einer B hne platziert ist public Cell getCell throws IllegalStateException ndert die z Koordinate der Komponente mit der die Zeichenreihenfolg von Komponenten beeinflusst werden kann Je h her der W
169. tive Solist Programme eingestellt H kchen ist gesetzt Sie sollten sich beim Entwickeln eines neuen Theaterst ckes ganz zu Anfang f r einen Typ entscheiden weil nachtr gliche Anderungen zwar m glich sind diese dann jedoch auch Anderungen an evtl bereits fertig gestellten Beispielprogrammen bedingen 7 12 1 Imperative PLUs Normalerweise bestehen Java Programme immer aus einer Klasse und einer Methode mit der Signatur public static void main String args Der Programmstart erfolgt bei der bergabe der Klasse an die JVM durch Aufruf dieser main Prozedur 83 In Solist kann in imperativen PLUs die Klassendeklaration weggelassen werden Die main Prozedur hat dar ber hinaus die verk rzte Signatur void main Im Hintergrund existiert ein Precompiler der die entsprechenden Umsetzungen automatisch erledigt Die wichtigsten Unterschiede zwischen purem Java und imperativen Solist Programmen sind hier nochmal vollst ndig aufgelistet e Anders als in Java bedarf es in imperativen Solist Programmen keiner Klassen Definition e In imperativen Solist Programmen gibt es keine Methode mit der Signatur public static void main String args Stattdessen gibt es die so genannte main Prozedur mit der Signatur void main e Solist Programme sind imperative keine objektorientierten Programme Es brauchen also keine Objekte erzeugt zu werden Trotzdem m ssen Prozeduren und Funktionen und globale Variablen nicht als static deklariert
170. tsAt col row Mauer class size 0 Description lt html gt Der Hamster h pft eine Kachel in seiner aktuellen Blickrichtung nach vorn lt br gt Fehler wenn sich dort eine Mauer oder der Rand des Territoriums befindet lt html gt public void vor throws MauerDaException if this vornFrei throw new MauerDaException switch this blickrichtung case 0 Ost this setLocation this getColumn 1 this getRow break case 1 Nord this setLocation this getColumn this getRow 1 break case 2 West this setLocation this getColumn 1 this getRow break case 3 Sued this setLocation this getColumn this getRow 1 break berpr fen Sie die Korrektheit dieser beiden Methoden indem Sie nach dem Compilieren das Befehlsfenster ffnen und die entsprechenden Items anklicken siehe Abbildung 7 12 Befehlsfen DER boolean vornFrei void erklimmeEineStufe void erklimmeGipfel void laufeZumBerg void rechtsUm Abb 7 12 Erweitertes Befehlsfenster 7 1 7 Klassen l schen Wenn Sie oberhalb eines Klassennamens im Klassenbereich ein Popup Men aktivieren erscheint dort auch ein Item Klasse l schen Hier ber k nnen Sie die 56 Klasse l schen Das Umbenennen oder Verschieben von Klassen in einen anderen Ordner ist in der aktuellen Version des Solist Simulators leider nicht m
171. uch als Simulator bezeichnet Hierbei handelt es sich um ein Computerprogramm das eine konkrete MPW abbildet und das das Erstellen und Testen von Programmen der MPW unterst tzt Beim Hamster Modell bildet der Hamster Simulator eine solche PLU 1 1 3 Entwicklung von Programmierlernumgebungen Das theoretische Entwickeln einer f r Programmiernanf nger geeigneten und interessanten Mini Programmierwelt sollte f r kreative Didaktiker eigentlich ein geringeres Problem darstellen als das software technische Entwickeln einer dazu geh rigen f r Programmieranf nger einfach zu bedienenden trotzdem aber ausreichend m chtigen Programmierlernumgebung Eine PLU muss als Bestandteile zumindest Komponenten zum Editieren und Compilieren von Programmen zum visuellen Gestalten einer virtuellen Landschaft und zum Ausf hren entsprechender Programme mit visuellem Feedback der einzelnen Befehle in der Landschaft zur Verf gung stellen Die Entwicklung einer solchen PLU ist selbst f r erfahrene Programmierer sicher eine Aufgabe die mehrere Wochen oder Monate in Anspruch nehmen kann 1 1 4 Einsatz und Nutzen von Solist Genau an dieser Stelle setzt nun Solist an Solist ist eine spezielle Entwicklungsumgebung f r PLUs Mit Hilfe von Solist k nnen einigerma en erfahrene Programmierer innerhalb kurzer Zeit PLUs entwickeln Bspw dauerte die Nachimplementierung des Hamster Simulators in Solist lediglich ca 3 4 Stunden Etwa dieselbe Zeit hat die
172. usf hren von Solist Programmen 22244440004n4440nnnnnnnnnnnnnnnnnnnnnnnnnnn nn 65 7 6 1 Starten eines Solist Programms 4444444444s0nnnnnnnnnnnnnnnnnnnnnnnnnnn nn 65 7 6 2 Stoppen eines Solist Programms 22244440000nnnnnnnnnnnnnnnannnnnnnnnnnn 66 7 6 3 Pausieren eines Hamster Programms uss 2444244444sn0nnnnnnn nn 66 7 6 4 W hrend der Ausf hrung eines Solist Programms 66 7 6 5 Einstellen der Geschwindigkeit 2244440000nn44nnnnnnnnnnnnnnnnnnnnnnnn 66 7 6 6 Wiederherstellen der B hne 22444400000n44nnnnnnnnnnnnnnnnnnnnnnnn 66 7 7 Debuggen von Solist Programmen 22 0unms44442n240nnHnnnnnnnnnnnnnnnnnnnnn 67 7 7 1 Beobachten der Programmausf hrung sssssss42ssnnnnnnnennnnnnnnn 67 7 7 2 Schrittweise Programmausf hrung 444444sssnnss nen nnnnnnnnnennnnnnn nn 68 7 22 83 Bleakpolnlsazusannsssusssnsnnnanr eisen 69 7 7 4 Debugger Fenster 224444444000nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 69 7 8 Anlegen und Verwalten von Aktionsbuttons 4244444400nnnnnn nn 70 7 8 1 NewPropHandler 2244444000004H4Hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 70 7 82 VlIeKkHandler usessanee a een a ae 71 78 3 ActionHandler r 3 a na aa aaa aaa a aaa aaaea inaia ia 72 7 9 Generieren einer PLU we 76
173. uszeigers bez glich des Hintergrundes In dem Fall dass eine Komponente ber das Maus Event informiert wird also die Komponente das Source Objekt ist liefert die Methode die x und y Koordinate des auszeigers bez glich des der Komponente zugeordneten Ikons return die x und y Koordinate des Maus Events relativ gesehen zum Source Objekt see java awt event MouseEvent getPoint public java awt Point getPoint pub pub HH HHOHH3H3 HUOITHO3 HUOH HHO HH E pub Die Methode liefert die Spalte ber der sich der Mauszeiger aktuell befindet return die Spalte ber der sich der Mauszeiger befindet lic int getColumn Die Methode liefert die Reihe ber der sich der Mauszeiger aktuell befindet return die Reihe ber der sich der Mauszeiger befindet lic int getRow Tritt ein Maus Event ein so werden alle Komponenten und die B hne dar ber informiert insofern das Maus Event oberhalb des ihnen zugeordneten Icons erfolgte si in ntsprechenden Handler Methode definiert und die Maus Event Benachrichtigung aktiviert haben F r die Reihenfolge der Benachrichtigung gilt Je weiter das Objekt auf der B hne im Vordergrund ist desto eher wird es informiert Die B hne wird als letzte informiert Das MouseInfo Objekt das dabei den Methoden bergeben wird ist dabei immer das gleiche
174. va awt event MouseEvent abgeleitet stellt also alle deren geerbte Methoden zur Verf gung An dieser Stelle sei auf die entsprechende Dokumentation der Klasse java awt event Mouse Event verwiesen berschrieben ist die Methode getSource Wird das Mouselnfo Objekt einer Event Handler Methode des B hnen Objektes bergeben liefert die Methode das aktuelle B hnen Objekt Wird das Mouselnfo Objekt einer Event Handler Methode eines Komponenten Objektes bergeben liefert die Methode das entsprechende Komponenten Objekt Ebenfalls berschrieben sind die Methoden getX getY und getPoint Im Falle dass das Source Objekt das B hnen Objekt ist liefern die Methoden die Pixel Koordinaten des Maus Events relativ gesehen zur B hne Im Falle dass das Source Objekt eine Komponente ist werden die Pixel Koordinaten des Maus Events relativ gesehen zu dem der Komponente zugeordneten Ikon geliefert ber die Methoden getColumn bzw getRow kann abgefragt werden ber welcher Zelle sich der Mauszeiger w hrend des Auftretens der Events befunden hat 6 5 Theaterlmage und Theaterlcon TheaterImage ist eine Theater Klasse mit vielf ltigen Methoden zum Erzeugen und Manipulieren von Bildern bzw Icons die dann Akteuren Requisiten oder der B hne zugeordnet werden k nnen Die Bilder lassen sich dabei auch noch zur Laufzeit ver ndern so dass mit Hilfe der Klasse TheaterImage bspw Punktez hler f r kleinere Spiele implementiert werden k nnen Init
175. verfolgung sichtbar gemacht ber das Men Fenster l sst es sich jedoch auch explizit sichtbar bzw unsichtbar machen Das Fenster besteht aus einem rechten und einem linken Teil innerhalb einer Split Pane Der Inhalt des Debugger Fensters wird nur dann aktualisiert wenn die Ablaufverfolgung aktiviert ist Im linken Bereich des Fensters werden die aktuell aufgerufenen Funktionen und die jeweilige Zeilennummer dargestellt in der sich die Programmausf hrung innerhalb der Funktion gerade befindet Ganz oben steht dabei immer die main Funktion ganz unten die zuletzt aufgerufene Funktion Im rechten Bereich werden Variablen und deren aktuelle Werte dargestellt Im Normalfall sind das genau die Variablen die in der zuletzt aufgerufenen Funktion 69 also der im linken Bereich ganz unten stehenden Funktion g ltig sind Die Darstellung erfolgt dabei in einem Elementbaum Bei strukturierten Variablen kann durch Mausklick auf das Symbol vor dem Variablennamen die Struktur weiter ge ffnet bzw wieder geschlossen werden Im pausierten Zustand ist es m glich sich auch die Werte lokaler Variablen anderer Funktionsinkarnationen anzuschauen Das ist m glich indem man im linken Bereich auf den entsprechenden Funktionsnamen klickt 7 8 Anlegen und Verwalten von Aktionsbuttons Wenn Sie aus Ihrer bisher definierten MPW eine PLU generieren lassen w rde g be es ein Problem In der generierten PLU fehlt n mlich der Klassenbereich so dass
176. vornehmen und den Druck starten k nnen 7 2 7 Editier Funktionen Im Editor Bereich k nnen Sie wie bei anderen Editoren auch ber die Tastatur Zeichen eingeben bzw wieder l schen Dar ber hinaus stellt der Editor ein paar weitere Funktionalit ten zur Verf gung die ber das Programm Men bzw die entsprechenden Editor Buttons in der Toolbar aktiviert werden k nnen e Ausschneiden Button 6 Toolbar Button von links Hiermit k nnen Sie komplette Passagen des Editor Bereichs in einem Schritt l schen Markieren Sie die zu l schende Passage mit der Maus und klicken Sie dann den Button an Der markierte Text verschwindet e Kopieren Button 7 Toolbar Button von links Hiermit k nnen Sie komplette Passagen des Editor Bereichs in einen Zwischenpuffer kopieren Markieren Sie die zu kopierende Passage mit der Maus und klicken Sie dann den Button an e Einf gen Button 8 Toolbar Button von links Hiermit k nnen Sie den Inhalt des Zwischenpuffers an die aktuelle Cursorposition einf gen W hlen Sie zun chst die entsprechende Position aus und klicken Sie dann den Button an Der Text des Zwischenpuffers wird eingef gt e R ckg ngig Button 9 Toolbar Button von links Wenn Sie durchgef hrte nderungen des Sourcecode aus welchem Grund auch immer wieder r ckg ngig machen wollen k nnen Sie dies durch Anklicken des Buttons bewirken e Wiederherstellen Button 10 Toolbar Button
177. werden e Ein imperatives Solist Programm setzt sich aus der main Prozedur sowie weiteren Prozeduren bzw Funktionen zusammen die vor oder nach der main Prozedur definiert werden d rfen Variablen k nnen global d h au erhalb von Prozeduren oder lokal d h innerhalb von Prozeduren definiert werden Der G ltigkeitsbereich von globalen Variablen erstreckt sich ber das gesamte Programm der G ltigkeitsbereich von lokalen Variablen ist auf den Prozedurrumpf beschr nkt e Der Aufruf bzw Start eines imperativen Solist Programms bewirkt die automatische Ausf hrung der main Prozedur Eine eher objektbasierte Notation beim Aufruf von Solist Befehlen in impertaiven Solist Programmen ist trotzdem m glich indem dem Solist ein Name zugeordnet wird Wie das genau funktioniert k nnen Sie in Abschnitt 7 1 2 nachlesen 7 12 2 Objektbasierte PLUs Manche Lehrenden bevorzugen bei der Benutzung von PLUs eine eher objektbasierte Notation bei der Objekte ber Namen angesprochen werden und in denen Programme innerhalb einer Klassendefinition eingeschlossen werden Bei dem Beispiel Theaterst ck kara als Nachbildung des Original JavaKara Simulators siehe Kapitel 10 ist das beispielsweise der Fall Bei der Wahl einer eher objektbasierten PLU haben Solist Programme die folgende Gestalt public class Solist extends lt Solist Klasse gt void main 84 lt Solist Klasse gt muss dabei durch den Namen der Solist Klasse ersetzt w
178. wt Color color Liefert die Farb ines bestimmten Pixels des TheaterlImages param x x Koordinate des Pixels param y y Koordinate des Pixels return die Farb ines bestimmten Pixels des TheaterImages HH HH HOHRHH NS public java awt Color getColorAt int x int y Spiegelt das TheaterImage horizontal Achtung Die Gr e des Bildes wird dabei nicht ver ndert public void mirrorHorizontally Spiegelt das TheaterImage vertikal Achtung Die Gr e des Bildes wird dabei nicht ver ndert A public void mirrorVertically Dreht das TheaterImage um eine bestimmte Gradzahl Achtung Die Gr e des Bildes wird dabei nicht ver ndert param degrees x Gradzahl der Drehung uA public void rotate int degrees Skaliert das TheaterImage auf einebestimmte Gr param width a die neue Breite des TheaterImages param height E die neue H he des TheaterImages S public void scale int width int height 120 Setzt die Transparenz Standardmaessig ist der Transparenzwert 255 gar nicht durchsichtig X param t Wert zwischen 0 ganz durchsichtig und 255 gar nicht 5 durchsichtig public void setTransparency int t Liefert die Transparenz return di ingestellte Transparenz Wert zwischen 0 ganz durchsichtig und 255 gar nicht durchsichtig pub
179. zu mouseExited Events finden sich in der Klasse java awt event MouseListener bergeben wird der Methode ein MouseIlnfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingMouseEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl die B hne als auch Komponenten k nnen auf mouseExited Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event HH RHHO3HO H H HUOTHOH HH HOHOTO HH HOF HH HR NS 101 public void mouseExited MouseIlnfo e 9 2 Component Actor Prop 9 2 1 Component package theater Requisiten die sie an di vererbt lt p gt lt p gt Requisiten ein Icon zuzuo Getter Methoden definiert Die Klasse Component definiert Methoden zur Verwaltung von Akteuren und von ihr abgeleiteten Klassen Actor und Prop Die wichtigsten Methoden der Klasse Component sind Methoden um Akteuren und rdnen und sie
180. zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingkKeyEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als auch die B hne k nnen auf keyTyped Events reagieren Die Reihenfolge in der eine Benachrichtigung erfolgt richtet 106 sich nach der Zeichenreihenfolge der Komponenten Je weiter ein Komponente im Vordergrund ist desto fr her wird sie benachrichtigt Die B hne wird nach allen Komponenten benachrichtigt Durch Konsumieren des Events kann die Benachrichtigungssequenz abgebrochen werden param e enth lt Details zum eingetretenen Event public void keyTyped KeyInfo e HH o A o E e a e HOT HH NH HH OH HOT HH HH Wird aufgerufen wenn w hrend die B hne den Focus besitzt ein keyPressed Event eingetreten ist Soll eine Komponente auf keyPressed Events reagieren muss sie diese Method ntsprechend berschreiben Genauere Informationen zu keyPressed Events finden sich in der Klasse java awt event KeyListener bergeben wird der Methode ein KeyInfo Objekt ber das Details zum eingetretenen Event abgefragt werden k nnen lt p gt lt p gt Die Methode wird nur aufgerufen wenn der HandlingKeyEvents Status gesetzt ist was standardm ig nicht der Fall ist lt p gt lt p gt Sowohl Komponenten als
Download Pdf Manuals
Related Search
Related Contents
Using VMware Horizon Client for Android KUDA 084150 holder Family Legal Assistant (FLA) User Manual, Form #09.019 BT121 Datasheet Nikon S6500 Digital Camera User Manual Samsung Galaxy Tab Active (8.0, LTE) User Manual 広報621号 FI302 - Smar ER900L and ER900L-RT User Manual Copyright © All rights reserved.
Failed to retrieve file