Geschwindigkeit und Lenkung schützen
Die Klasse Ente optimieren
In der Klasse Ente gibt es zwei Attribute, die von außen verändert werden
können: geschwindigkeit und lenkung.
Sie können dabei beliebige Werte annehmen.
Das ist für das Spiel nicht sinnvoll, da die Enten sich dann nur schwer
kontrollieren lassen.
Um das Spiel zu verbessern, passen wir die Klasse Ente an.
Die anderen Klassen bleiben größtenteils unverändert.
Ente selbst entscheiden.
Sie ist für ihren eigenen Zustand verantwortlich und kennt die Regeln für
eine sinnvolle Bewegung.
Setter für die Geschwindigkeit
Für das Spiel könnte die Geschwindigkeit beispielsweise mindestens 1 und höchstens 4 betragen. Kleinere Werte werden auf 1, größere auf 4 begrenzt.
Aufgabe 1
Ergänze in der Klasse Ente einen Setter
für geschwindigkeit. Der Setter soll neue Werte auf einen sinnvollen
Bereich begrenzen.
Welcher Bereich sinnvoll ist, kannst du selbst entscheiden.
Erzeuge nach dem Kompilieren im Codepad mit val probe = Ente()
eine Testente. Übernimm das Ergebnis von probe auf die Objektbank
und öffne den Inspektor. Weise geschwindigkeit nacheinander −2, 3 und
10 zu, einmal im Codepad und einmal im Inspektor.
Beschreibe und erkläre die Ergebnisse.
Lenkung nach links und rechts
Das Attribut lenkung gibt an, um wie viele Grad sich eine Ente
bei jedem Spielschritt dreht. Negative Werte lenken in die eine, positive
Werte in die andere Richtung. Bei 0 entsteht nur die kleine
zufällige Richtungsänderung aus der Methode act().
Für das Spiel sind beispielsweise Werte von −5 bis 5 sinnvoll. Dieses Mal sollen Zuweisungen außerhalb des Bereichs ignoriert werden: Der bisherige Wert bleibt dann erhalten.
Aufgabe 2
lenkung.
Teste analog zu Aufgabe 1 mit Hilfe des Codepads und des Objektinspektors.
Optional: Grenzen als Attribute
Falls du dich mit der Vertiefung zu privaten Attributen beschäftigt hast,
kannst du die Grenzen für die Geschwindigkeit als private Attribute
in der Klasse Ente speichern.
Die Grenzen erhalten dann eigene Attribute. Dadurch stehen die Zahlen nicht
fest codiert im Setter und lassen sich später leicht anpassen:
private val minimaleGeschwindigkeit = 1
private val maximaleGeschwindigkeit = 4