A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen :...

20
A Workshop

Transcript of A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen :...

Page 1: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A

Workshop

Page 2: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 2

Workshop

© by Software AG

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.

Page 3: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 3

Workshop

© by Software AG

Klassendiagramm

Sequenzdiagramm

CarRace

main

String[ ]CarRace

Car

kennzeichenmarkeleistung

Car

print

CarRace Car

main()

print()

new Car( )

Game [ Project ]

Werte setzen mittels SET-Methoden

Page 4: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 4© by Software AG

Quest

Abb. 1: Spielbrett

Du bist im Zauberwald gefangen, aber findest Du das verwunschene Schloss,

bist du erlöst.

SpielregelnZiel 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.

Page 5: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 5

Workshop

© by Software AG

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 AdvancedMit 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.

Das ZiehenDas Ziehen der Spielfigur erfolgt über die Konsole des Spielers (Abbildung 2).

Page 6: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 6

Workshop 1

© by Software AG

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.

Page 7: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 7

Workshop 1

© by Software AG

Klassendiagramm

Sequenzdiagramm

Quest

play

Quest

Start

main

String[ ]Start

Car

kennzeichenmarkeleistung

Car

print

Start Quest Car

main()

new Quest( )

print()

play()

new Car( )

Werte setzen

Game [ Project ]

Page 8: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 8

Workshop 2

© by Software AG

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)

Page 9: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 9

Workshop 2

© by Software AG

Klassendiagramm

Sequenzdiagramm

Quest

play

myCar

Quest

Start

main

String[ ]Start

Car

Car

kennzeichenmarkeleistungort

PositionCar

print

Position

xy

Positionintint

Position

Start Quest Car

main()

print()

play()

Position

new Quest( ) new Car( )

new Position( )

Werte setzen

Quest [ Project ]

Page 10: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 10

Workshop 3

© by Software AG

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.

Page 11: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 11© by Software AG

Workshop 3Klassendiagramm

Sequenzdiagramm

Quest

play

myCar

PositionQuest

Car

Car

kennzeichenmarkeleistungort

PositionCar

print

movePosition

Position

xy

Positionintint

Position

Start

main

String[ ]Start

Start Quest Car

main()new Quest( )

play(Position)move(Position)

print()

print()

play(Position)...

Position

new Position( )Werte setzen

new Car( )

add(Position) : Positionnew Position( )

Quest [ Project ]

addPosition Position

Page 12: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 12

Workshop 4

© by Software AG

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.

Page 13: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 13© by Software AG

Workshop 4Klassendiagramm

Sequenzdiagramm

Quest

play

myCar

PositionQuest

Konsole

main

framemyQuest

String[ ]

Konsole

maintainCar

rechts

exit

Position

Car

Konsole Quest Car

main()

maintainCar()

print()

rechts()play(Position)

move(Position)

exit()

print()

Position

new Position( )Werte setzen

new Quest( )new Car( )

add(Position) : Positionnew Position( )

Page 14: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 14

Workshop 5

© by Software AG

Klassendiagramm

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.Boardpublic 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 mitden 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.

Quest

play

myCarmyBoard

PositionQuest

Konsole

main

framemyQuest

String[ ]

Konsole

maintainCar

rechts

exit

Position

Board

wipe

Board

drawStringintint

Car

Car

draw

kennzeichenmarkeleistungort

Board

PositionCar

print

movePosition

Page 15: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 15© by Software AG

Workshop 5

Sequenzdiagramm

Konsole Quest Car Position

main()

maintainCar()

print()

new Board( )

rechts()play(Position)

wipe()

draw(Board)

exit()

print()

Board

new Position( )

setVisible(true)

draw("Car",getOrt().getX(),getOrt().getY()

move(Position)

Werte setzen

new Quest( )new Car( )

add(Position) : Positionnew Position( )

draw("Grid",0,0)

Page 16: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 16

Workshop 6

© by Software AG

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.

Page 17: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 17

Workshop 6

© by Software AG

Klassendiagramm

Element

Element

draw (abstract)

ort

abstract

abstract

Board

PositionElement

Car

Car

draw

kennzeichenmarkeleistung

Board

PositionCar

print

movePosition

Treasure

TreasurePosition

Treasure

drawBoard

show (abstract)BoardPosition

Apple

ApplePosition

Apple

showBoardPosition

Page 18: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 18

Workshop 7

© by Software AG

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 Spielendesonst: 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.

Page 19: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 19

Workshop 7

© by Software AG

Klassendiagramm

Quest

play

myCarelementsmyBoard

PositionQuest

Array

(Element)

Arrayint

Car

Element

Treasure

Apple

Konsole

Board

Position

Page 20: A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen : Car, CarRace Starten Sie den JBuilder. Legen Sie ein neues.

A - 20© by Software AG

Workshop 7

Sequenzdiagramm

Konsole Quest Car Board Array Apple

main()

maintainCar()new Quest( )

print()

rechts()play(Position)

wipe()

exit()

Position

draw("Car",getOrt().getX(),getOrt().getY())

show(Board,Position)draw("Apple", pos.getX(),pos.getY())

draw(Board)

draw(Board)

move(Position)

new Element[13]

setVisible(true)

elements[..] = <apple>

new Apple(new Position(..,..))

draw("Tree", getOrt().getX(),getOrt().getY()

new Board( )

new Position(..,..)Werte setzen

add(Position) : Positionnew Position( )

equals(Position) : Boolean

draw("Grid",0,0)

new Car( )