Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

A Workshop About this chapter General description Units Time Schedule

Ähnliche Präsentationen


Präsentation zum Thema: "A Workshop About this chapter General description Units Time Schedule"—  Präsentation transkript:

1 A Workshop About this chapter General description Units Time Schedule
Related Documentation A Workshop

2 Workshop Ziel : JBuilder kennenlernen , Anlegen der Klassen : Car , CarRace Starten Sie den JBuilder. Legen Sie ein neues Projekt mit dem Namen Game an. Legen Sie eine neue Klasse Car mit den Attributen kennzeichen (String), marke (String) und leistung (int) an . Für alle Attribute werden die Get/Set-Methoden benötigt. Speichern und übersetzen Sie Ihre Car-Klasse. Legen Sie eine neue Klasse CarRace mit Visibility Public an. Definieren Sie in dieser Klasse eine Methode main mit den Eigenschaften Public und static. Die main-Methode wird mit einem Parameter vom Typ Array : String[] aufgerufen. Legen Sie in der main-Methode ein Objekt myCar vom Typ Car an. Besetzen Sie die Attribute des Autos mit Werten und zeigen Sie die Attributwerte mit System.out.println an. Speichern und übersetzen Sie Ihre CarRace-Klasse. Starten Sie Ihr Projekt mit der Main Class CarRace. Fügen Sie in die Car-Klasse eine neue Methode print ein, die die Attribute des Autos anzeigt. Ändern Sie die main-Methode der CarRace-Klasse ab, so dass die Anzeige des Autos jetzt durch die print-Methode des Autos erfolgt. Übersetzen Sie alle erforderlichen Klassen neu und starten Sie Ihr Projekt. Method do not discuss Next Topic / Section (Default: next chapter) by Software AG

3 Workshop Game [ Project ] Klassendiagramm Sequenzdiagramm Car CarRace
kennzeichen marke leistung Method do not discuss Next Topic / Section (Default: next chapter) main String[ ] print CarRace Car Sequenzdiagramm CarRace Car main() new Car( ) Werte setzen mittels SET-Methoden print() by Software AG

4 Quest Spielregeln Method Du bist im Zauberwald gefangen,
aber findest Du das verwunschene Schloss, bist du erlöst. Spielregeln Ziel des Spiels ist, das Schloss zu finden, das im Zauberwald versteckt ist. Viele Schätze liegen unter den Bäumen, aber nur hinter einem Baum liegt der Eingang zum Schloss. Method do not discuss Next Topic / Section (Default: next chapter) Abb. 1: Spielbrett by Software AG

5 Additional Information
Workshop Das Ziehen Das Ziehen der Spielfigur erfolgt über die Konsole des Spielers (Abbildung 2). Additional Information Abb. 2: Konsole Mit den Knöpfen kann die Spielfigur jeweils eine Gitterzelle nach oben / unten / links / rechts bewegt werden. Bei jedem Zug werden 30 Energie-Einheiten verbraucht. Zu Spielbeginn besitzt die Figur einen vollen Tank mit 1500 Energie-Einheiten. An drei Energiequellen kann die Figur ihren Energievorrat wieder aufladen. Bei leerem Tank ist kein Zug mehr möglich. Quest Advanced Mit dem Aufbaupaket von Quest sind fünf verschiedene Schätze in einer vom Spiel vorgegebenen Reihenfolge zu finden. Aufgabe des Spielers ist, sich durch Ziehen seiner Spielfigur auf dem Spielbrett eine gute Kenntnis zu verschaffen, wo welcher Schatz versteckt ist und zu dem gerade gesuchten Schatz zu ziehen. Das Spiel ist beendet, wenn die fünf Schätze gefunden sind. Als Zusatzmodule sind weitere Spielfiguren und Energiequellen erhältlich. Der Spielspass mit Quest ist dadurch in immer neuen Varianten möglich. by Software AG

6 Workshop 1 Ziel : Anlegen der Klassen : Car --> Spielfigur Quest --> "Spiel-Controlers" Start --> GUI-Ersatz Starten Sie den JBuilder. Legen Sie eine neue Klasse Quest an. Definieren Sie in dieser Klasse eine Methode play, die ohne Parameter aufgerufen wird. Instanziieren Sie in dieser Methode ein Car-Objekt, besetzen Sie die Attribute des Autos mit Werten und zeigen Sie die Attributwerte durch die print-Methode des Autos an. Speichern und übersetzen Sie Ihre Quest-Klasse. Legen Sie eine neue Klasse Start mit der Eigenschaft Public an. Definieren Sie in dieser Klasse eine Methode main mit den Eigenschaften Public und static. Die main-Methode wird mit einem Parameter vom Typ Array : String[] aufgerufen. Legen Sie in der main-Methode ein Objekt myQuest vom Typ Quest an und rufen Sie die play-Methode dieses Objekts auf. Speichern und übersetzen Sie Ihre Start-Klasse. Starten Sie Ihr Projekt mit der Main Class Start. Method do not discuss Next Topic / Section (Default: next chapter) by Software AG

7 Workshop 1 Game [ Project ] Klassendiagramm Sequenzdiagramm Car Start
Quest kennzeichen marke leistung Method do not discuss Next Topic / Section (Default: next chapter) main play String[ ] print Start Quest Car Sequenzdiagramm Start Quest Car main() new Quest( ) play() new Car( ) Werte setzen print() by Software AG

8 Workshop 2 Ziel : Anlegen einer weiteren Klasse (Position), die als Attribut in einer bereits definierten Klasse verwendet wird. Legen Sie eine neue Klasse Position mit zwei int-Attributen x und y an. Schreiben Sie für diese Klasse einen Konstruktor, mit dem die Koordinaten initialisiert werden können. Überlegen Sie, welche Rolle der Default-Konstruktor (ohne Parameter) dieser Klasse bzgl. Initialisierung spielen soll. Fügen Sie in die Car-Klasse ein neues Attribut ort vom Typ Position ein. Schreiben Sie in der Car-Klasse einen Konstruktor, mit dem der Ort des Autos initialisiert werden kann. Überlegen Sie, welche Rolle der Default-Konstruktor dieser Klasse ( Initialisierung des Attributes ort ) spielen soll. Fügen Sie in der Quest-Klasse ein neues Attribut myCar vom Typ Car ein. Instanziieren Sie im Konstruktor von Quest ein Auto, initialisieren Sie dessen Ort und speichern Sie die Referenz in myCar. In der play-Methode soll kein Auto instanziiert werden. Übersetzen Sie alle erforderlichen Klassen neu und starten Sie Ihr Projekt. Erweitern Sie die print-Methode der Car-Klasse, so dass auch der Ort des Autos angezeigt wird. (Hinweis : die Methode toString(<-- String) wird von Object geerbt und kann überschrieben werden) Method do not discuss Next Topic / Section (Default: next chapter) by Software AG

9 Workshop 2 Quest [ Project ] Klassendiagramm Sequenzdiagramm Car Start
main String[ ] Quest Position kennzeichen marke leistung ort myCar x y Method do not discuss Next Topic / Section (Default: next chapter) print play Position int Car Quest Position Car Position Sequenzdiagramm Start Quest Car Position main() new Quest( ) new Car( ) new Position( ) play() Werte setzen print() by Software AG

10 Workshop 3 Method do not discuss Next Topic / Section
Ziel : Lassen Sie Ihr Auto fahren. Führen Sie dazu die folgenden Erweiterungen / Änderungen durch Das Addieren von Positionen sollte in der Position-Klasse erfolgen. Die Methode soll die beiden Objekte nicht verändern, sondern ein neues Position-Objekt erzeugen. Legen Sie dazu in der Klasse Position eine Methode add an. Parameter ist ein Objekt vom Typ Position, das die Verschiebung des Autos angibt. Zurückgegeben wird ein neues Positions-Objekt, dass die neuen X- und Y-Koordinaten aus der Summe der x und y-Koordinaten der beiden Objekte (Aktuelle Position / Verschiebung) enthält. Der Aufruf erfolgt beispielsweise in der move-Methode des Autos in der Form setOrt(getOrt().add($p)). Legen Sie in der Car-Klasse eine Methode move an. Parameter ist ein Objekt vom Typ Position, das die Verschiebung des Autos angibt. Ändern Sie die play-Methode in Quest, so dass diese nun einen Parameter vom Typ Position akzeptiert und mit diesem die move-Methode des Autos aufruft. Zeigen Sie nach jeder Bewegung die aktuelle Position des Autos an. Besetzen Sie die Attribute des Autos mit Werten jetzt im Konstruktor von Quest und zeigen Sie die Werte mit der print-Methode an. Rufen Sie in der main-Methode der Start-Klasse mehrmals die play-Methode von Quest auf und lassen Sie Ihr Auto umherfahren. Optional Bewegungen eines Autos erfordern Energieaufwand. Zur Berechnung des Energieverbrauchs sollte in der Position-Klasse eine Methode intValue definiert werden, die für ein Position-Objekt die Summe der (positiven) x- und y-Koordinate als int-Wert zurückgibt. Der Aufruf erfolgt beispielsweise in der move-Methode des Autos in der Form verbrauch = verschiebung.intValue(). Hinweis: Zur Ermittlung des Absolutwertes eines int-Objekts kann die Methode java.lang.Math.abs verwendet werden. Definieren Sie in der Car-Klasse ein neues Attribut energie vom Typ int, das zu Beginn einen Vorrat von 1500 Energie-Einheiten enthält. Der Energieverbrauch bei jeder Bewegung entspricht der Summe der (positiven) x- und y-Verschiebung des Autos. Berücksichtigen Sie die Energieabnahme bei der Bewegung. Passen Sie die move-Methode in der Car-Klasse entsprechend an. Erweitern Sie die print-Methode in der Car-Klasse , so dass auch die Energie angezeigt wird. Method do not discuss Next Topic / Section (Default: next chapter) by Software AG

11 Workshop 3 Quest [ Project ] Klassendiagramm Sequenzdiagramm Car Start
main String[ ] Quest Position kennzeichen marke leistung ort myCar x y Method do not discuss Next Topic / Section (Default: next chapter) print play Position Position move int Position Quest Car Position Position Car add Position Position Sequenzdiagramm Start Quest Car Position main() new Quest( ) new Car( ) new Position( ) Werte setzen print() play(Position) move(Position) add(Position) : Position new Position( ) print() play(Position) ... by Software AG

12 Workshop 4 Method Achtung ::
A) Ziel : Erstellen der grafischen Oberfläche Layout Erstellen Sie eine Konsole, über die die Eigenschaften Ihres Autos eingegeben / geändert werden können. Legen Sie in der Konsol-Klasse eine Instanzvariable myQuest vom Typ Quest an. B) Ziel : Anlegen von Methoden in der Klasse Konsole, die mit dem Event Listener der entsprechenden GUI-Komponenten verknüpft werden sollen (Apply / Exit-Button): Methode maintainCar (Visibility : public). Beim Drücken des "Apply"-Buttons soll beim ersten Mal eine Instanz von Quest angelegt und die Referenz in myQuest gespeichert werden. Beim ersten und jedem weiteren Aufruf werden die Attribute des Autos auf die eingegebenen Werte geändert und zur Kontrolle ausgegeben. (Werte im GUI sind Strings. Um sie in int-definierte Attribute zu zuweisen wird eine Wrapper-Methode der Integer Klasse benötigt  Integer.parseInt() ) Methode exit (Visibility : Public) Beim Drücken des "Exit"-Buttons und beim Schließen des Fensters soll diese Methode aktiviert werden. Der Event Listener beendet die Anwendung mit System.exit(0). Verknüpfen Sie diese Methoden mit den entsprechenden Event Listener, der jeweiligen Komponenten (Apply-Button, Exit-Button, Windows-Cross). Übersetzen Sie alle erforderlichen Klassen und starten Sie Ihr Projekt über die Konsole C) Ziel : Anlegen von Methoden in der Klasse Konsole, die mit dem Event Listener der entsprechenden GUI-Komponenten verknüpft werden sollen (Pfeil-Buttons): Methoden für die Push Buttons zum Bewegen des Autos. Diese rufen die play-Methode des Quest-Objekts auf und verschieben das Auto um jeweils 30 Einheiten nach oben / unten / links / rechts. Der Ursprung des Koordinatensystems befindet sich dabei in der linken oberen Ecke. Verknüpfen Sie diese Methoden mit den entsprechenden Event Listener, der jeweiligen Komponenten (<-, >-, ^-, v-Button). Übersetzen Sie alle erforderlichen Klassen und starten Sie Ihr Projekt über die Konsole. Optional Das Auto soll nach der ersten Initialisierung nur noch über die Push Buttons bewegt werden können. Verhindern Sie in der maintainCar-Methode die erneute Eingabe der Koordinaten, indem Sie die beiden Koordinatenfelder durch Aufruf der Methode setEditable(false) deaktivieren. Zeigen Sie nach einer Bewegung des Autos den aktuellen Ort in den Koordinatenfeldern der Konsole an.(Wrapper-Methode für int  String = String.valueOf() ) Zeigen Sie die aktuelle Energie des Autos auf der Konsole an. Method Achtung :: Der Jbuilder legt auch zwei Klassen an. Die erste entspricht der "ohne-Gen" -Klasse in Bolero. Die Zweite ist die Klasse, die die GUI-Komponenten in sich trägt. Die Klassen referenzieren sich nicht gegenseitig !!!! Die Erste trägt eine vom Jbuilder erzeugte Variable frame in sich, die auf die "GUI"-Klasse refernziert. Der JBuilder legt die erste Klasse nur im Sinne des : "jetzt kann das GUI unabhängig getestet werden" an. Sie hat eine main-Methode und legt das GUI mit frame.pack() auf. Design-Aspekte können hier sehr schön angesprochen werden. (ein User-Control (UC) für alle GUI's in meiner Anwendung oder Beibehalten der jeweiligen UC's pro GUI und nochmal ein UC um die jeweiligen GUI-UC'S anzusprechen. Folgendes muß vorher besprochen werde : In Klasse KonsoleGUI: - ein Attribut namens parent vom Typ Konsole anlegen - einen Konstruktor mit Parameter vom Typ Konsole definieren - in diesem Konstrukor den eigenen Default-Konstruktor aufrufen mit this() und das Attribut parent versorgen - Events vorsehen (appy, exit, moveright, move ...) In der Klasse Konsole : - ein Attribut frame anlegen vom typ Konsole-GUI (bisher im Default-Konstruktor) - Instanziierung eines KonsoleGUI-Objects und mitgeben der eigenen Instanz durch Aufruf des KonsoleGUI-Konstruktors mit Parameter. (frame = new KonsoleGUI(this) ) - codieren der methoden maintaincar ... wie im workshop beschrieben. by Software AG

13 Workshop 4 Klassendiagramm Sequenzdiagramm Konsole Quest Car Method
frame myQuest myCar main String[ ] maintainCar play Position Method do not discuss Next Topic / Section (Default: next chapter) rechts Quest Position exit Konsole Sequenzdiagramm Konsole Quest Car Position main() maintainCar() new Quest( ) new Car( ) new Position( ) Werte setzen print() rechts() play(Position) move(Position) add(Position) : Position new Position( ) print() exit() by Software AG

14 Workshop 5 Klassendiagramm Method Car Quest Konsole Board Position
Ziel : Zeigen Sie die Position Ihres Autos grafisch an. Verwenden Sie dazu die Klasse Board, die sich im Package board befindet und Autos im Bereich zwischen 0 und 420 darstellen kann. public class board.Board public InstanzMethoden Constructor( ) wipe ( ) "reinigt" das Spielbrett draw (String,int,int) zeichnet das entsprechende Objekt auf dem Spielbrett throws UnknownElement Exception Definieren Sie in Quest eine Instanzvariable myBoard vom Typ Board. Implementieren Sie in der Car-Klasse eine Methode draw, die einen Parameter vom Typ Board akzeptiert und dessen draw-Methode mit den Parametern ("Car", x-Koordinate, y-Koordinate) aufruft. Legen Sie im Konstruktor von Quest eine Instanz von Board an. Verwenden Sie dazu die Instanzvariable myBoard. Machen Sie das Board durch Aufruf der Methode setVisible(true) sichtbar. Rufen Sie in der play-Methode von Quest nach dem Verschieben des Autos dessen draw-Methode auf und übergeben Sie das Board als Parameter. Zeichnen Sie das Grid auf das Spielbrett durch den Aufruf der Methode draw der Klasse Board mit den Parametern ("Grid",0,0). Löschen Sie vor dem Zeichnen des Autos den aktuellen Inhalt des Boards mit dessen Methode wipe(). Übersetzen Sie alle erforderlichen Klassen und starten Sie Ihr Projekt. Method do not discuss Next Topic / Section (Default: next chapter) Klassendiagramm Car Quest Konsole kennzeichen marke leistung ort myCar myBoard frame myQuest play print Position main Quest move String[ ] Position maintainCar draw Board rechts Board Car Position exit Car Konsole wipe draw Position String int Board by Software AG

15 Workshop 5 Sequenzdiagramm Konsole Quest Car Position Board Method
main() Method do not discuss Next Topic / Section (Default: next chapter) maintainCar() new Quest( ) new Car( ) new Position( ) Werte setzen new Board( ) setVisible(true) print() rechts() play(Position) move(Position) add(Position) : Position new Position( ) print() wipe() draw("Grid",0,0) draw(Board) draw("Car",getOrt().getX(),getOrt().getY() exit() by Software AG

16 Workshop 6 Ziel : Entwerfen Sie eine Vererbungshierarchie der Spiel-Elemente von Quest. Legen Sie die erforderlichen Klassen mit ihren abstrakten und konkreten Eigenschaften an. Alle Elemente besitzen einen Ort und können auf das Spielbrett gezeichnet werden. Legen Sie dazu eine neue abstrakte Klasse Element an. Die Klasse besitzt ein Attribut ort vom Typ Position und eine abstrakte Methode draw. Das Attribut soll gekapselt sein. (private, Get/Set). Die Klasse soll einen Konstruktor besitzen, mit dem der Ort des Elements initialisiert werden kann. Überlegen Sie, welche Rolle der Default-Konstruktor spielen soll. Machen Sie die Car-Klasse zu einer Unterklasse von Element. Führen Sie die erforderlichen Änderungen in der Car-Klasse durch. Legen Sie für die Schätze des Spiels eine neue Klasse Treasure als Unterklasse von Element an. Schätze werden mit einer konkreten draw-Methode auf dem Spielbrett als Baum angezeigt. Es muss aber auch möglich sein, sie in ihrem wirklichen Aussehen an einem beliebigen Ort (beispielsweise unterhalb des Gitters) darzustellen. Legen Sie dazu eine abstrakte Methode show an, die außer dem Board einen weiteren Parameter vom Typ Position akzeptiert. Legen Sie einige der Klassen Apple, Bow, Castle, Coin, Chain, Crown, Diamond, Heart, Ring, Sword als Unterklassen von Treasure an und implementieren Sie jeweils eine konkrete show-Methode. Method do not discuss Next Topic / Section (Default: next chapter) by Software AG

17 Workshop 6 Klassendiagramm Element abstract Method Car Treasure
ort draw (abstract) Board Element Position Method do not discuss Next Topic / Section (Default: next chapter) Element Car Treasure abstract kennzeichen marke leistung draw Board print show (abstract) Board Position move Position Treasure draw Position Board Treasure Car Position Car Apple show Board Position Apple Position Apple by Software AG

18 Workshop 7 Method Ziel : Stellen Sie das Spiel fertig:
Fügen Sie in die Quest-Klasse ein neues Attribut elements vom Typ Element[ ] ein und instanziieren Sie die Liste im Konstruktor von Quest. Legen Sie dabei auch einige Schätze an und fügen Sie sie in die Liste ein.(bspw. elements[0] = new Apple(new Position(90,180)). Beachten Sie, dass alle x- und y-Koordinaten Vielfache von 30 im Bereich von 0 bis 420 sein sollten. Implementieren Sie folgenden Ablauf in der play-Methode: Auto bewegen (Methode move) Spielbrett aktualisieren (Inhalt löschen und Auto und Schätze neu zeichnen). (Methode wipe,draw) Überprüfen, ob eine Kollision des Autos mit einem Schatz stattfindet (Abfragen mittels der Methode equals in Klasse Position s.Hinweis) ist das Schloss gefunden: Schloss anzeigen und Spielende sonst: gefundenen Schatz anzeigen. Hinweis: Um Positionen auf Gleichheit zu überprüfen, kann in der Position-Klasse eine Methode equals implementiert werden, die einen Parameter vom Typ Position besitzt und als Result true/false liefert. Der Aufruf der equals-Methode erfolgt z.B. durch if (p1.equals(p2)) { … }. Übersetzen Sie alle erforderlichen Klassen und starten Sie Ihr Spiel. Optional 1 Der Spieler soll auf der Konsole über die Ausführung des Spielzugs informiert werden. Ändern Sie dazu die play-Methode in Quest ab, so dass diese ein Result-Objekt vom Typ String zurückgibt, das auf der Konsole in einem neuen Textfeld angezeigt wird. Optional 2 Legen Sie eine neue Klasse GasStation als Unterklasse von Element an. Instanziieren Sie im Konstruktor von Quest drei Instanzen von GasStation und fügen Sie sie in die ArrayList ein. Trifft das Auto bei seiner Bewegung auf eine Tankstelle, wird der Tank wieder auf 1500 Einheiten aufgefüllt. Reicht die Energie nicht aus, um den Zug auszuführen, ist das Spiel beendet. Method do not discuss Next Topic / Section (Default: next chapter) by Software AG

19 Workshop 7 Klassendiagramm Element Position Method Car Treasure Apple
do not discuss Next Topic / Section (Default: next chapter) Car Treasure Apple Quest Konsole myCar elements myBoard play Array Position Quest (Element) Array int Board by Software AG

20 Workshop 7 Sequenzdiagramm Konsole Quest Car Position Board Array
Apple main() maintainCar() new Quest( ) new Car( ) Method do not discuss Next Topic / Section (Default: next chapter) new Position(..,..) Werte setzen new Board( ) setVisible(true) new Element[13] new Apple(new Position(..,..)) elements[..] = <apple> print() rechts() play(Position) move(Position) add(Position) : Position new Position( ) wipe() draw("Grid",0,0) draw(Board) draw("Car",getOrt().getX(),getOrt().getY()) draw(Board) draw("Tree", getOrt().getX(),getOrt().getY() equals(Position) : Boolean show(Board,Position) draw("Apple", pos.getX(),pos.getY()) exit() by Software AG


Herunterladen ppt "A Workshop About this chapter General description Units Time Schedule"

Ähnliche Präsentationen


Google-Anzeigen