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 ganze Zahlen 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.
Die Spielwelt darf weiterhin die Geschwindigkeit und die Lenkung der Enten verändern.
Ob die Werte zulässig sind, sollte aber die 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. Lass dir anschließend durch Eingabe von probe das Objekt im Codepad
anzeigen, übernimm es in den Objektbereich und wähle Untersuchen.
Teste geschwindigkeit mit selbst gewählten Werten unterhalb,
innerhalb und oberhalb deines zulässigen Bereichs, 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 nach links, positive
Werte nach rechts. 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.
Dadurch stehen die Zahlen nicht fest codiert im Setter und lassen sich später
leicht anpassen:
private val minimaleGeschwindigkeit = 1
private val maximaleGeschwindigkeit = 4