A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen :...
-
Upload
kerstin-langner -
Category
Documents
-
view
212 -
download
0
Transcript of A Workshop. A - 2 Workshop © by Software AG Ziel : JBuilder kennenlernen, Anlegen der Klassen :...
A
Workshop
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.
A - 3
Workshop
© by Software AG
Klassendiagramm
Sequenzdiagramm
CarRace
main
String[ ]CarRace
Car
kennzeichenmarkeleistung
Car
CarRace Car
main()
print()
new Car( )
Game [ Project ]
Werte setzen mittels SET-Methoden
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.
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).
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.
A - 7
Workshop 1
© by Software AG
Klassendiagramm
Sequenzdiagramm
Quest
play
Quest
Start
main
String[ ]Start
Car
kennzeichenmarkeleistung
Car
Start Quest Car
main()
new Quest( )
print()
play()
new Car( )
Werte setzen
Game [ Project ]
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)
A - 9
Workshop 2
© by Software AG
Klassendiagramm
Sequenzdiagramm
Quest
play
myCar
Quest
Start
main
String[ ]Start
Car
Car
kennzeichenmarkeleistungort
PositionCar
Position
xy
Positionintint
Position
Start Quest Car
main()
print()
play()
Position
new Quest( ) new Car( )
new Position( )
Werte setzen
Quest [ Project ]
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.
A - 11© by Software AG
Workshop 3Klassendiagramm
Sequenzdiagramm
Quest
play
myCar
PositionQuest
Car
Car
kennzeichenmarkeleistungort
PositionCar
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
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.
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( )
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
movePosition
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)
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.
A - 17
Workshop 6
© by Software AG
Klassendiagramm
Element
Element
draw (abstract)
ort
abstract
abstract
Board
PositionElement
Car
Car
draw
kennzeichenmarkeleistung
Board
PositionCar
movePosition
Treasure
TreasurePosition
Treasure
drawBoard
show (abstract)BoardPosition
Apple
ApplePosition
Apple
showBoardPosition
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.
A - 19
Workshop 7
© by Software AG
Klassendiagramm
Quest
play
myCarelementsmyBoard
PositionQuest
Array
(Element)
Arrayint
Car
Element
Treasure
Apple
Konsole
Board
Position
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( )