Übungen
Erweiterungen und Übungen zu "Schweine im Weltall"
Aufgabe 1 - Zufällig Springen
Wenn das Schwein das Ende seiner Welt erreicht, soll es an einem zufälligen Platz innerhalb der Welt erscheinen. Du musst dazu herausfinden, wie das Schwein überprüfen kann, ob es am Ende der Welt ist und wie es seine Position ändern kann (Hinweis: Vererbung). Eine Lösungsidee könnte dann sein: Wenn ich am Ende der Welt bin, dann ermittle ich zwei Zufallszahlen für x- und y-Koordinaten und springe dort hin.
Aufgabe 2 - Aus der Welt laufen
Ein Programmierer hat folgenden Code geschrieben:
Beschreibe was der Programmierer wohl erreichen wollte, erkläre warum der Code nicht das Gewünschte bewirkt und verbessere ihn.
Aufgabe 3 - Gewinnstufen
Wenn auf das Schwein geklickt wurde, soll überprüft werden, zu welchem Zeitpunkt dies geschehen ist. Zu früh bewirkt, dass das Schwein vor Wut explodiert. Ansonsten soll je nach Zeitpunkt die Grafik für ein trauriges, halbwegs zufriedenes oder ein glückliches Schwein eingestellt werden. Damit die Grafik schöner aussieht ist es vorteilhaft das Schwein wieder "gerade" zu stellen. Stelle die Lösungsidee als Flussdiagramm und Struktogramm dar. Welche Vorteile bieten die Darstellungen jeweils? Implementiere die Lösungsidee.
Aufgabe 4 - Eigene Ideen
Ergänze oder variiere das Spiel mit eigenen Ideen. Dies ist wahrscheinlich eine der wichtigsten Aufgaben! Anregungen dazu könnten sein:
- Das Schwein soll sich immer nach genau 20 Schritten drehen.
- Die Geschindigkeit von Greenfoot soll zufällig oder in Abhängigkeit vom Alter des Schweins variieren. (Hinweis:
Greenfoot.setSpeed(60)
setzt die Geschwindigkeit auf 60%. - Wenn man beim Klicken das Schwein verfehlt, also auf die Welt trifft, dann sollen Punkte abgezogen werden oder das Spiel kurz schneller laufen oder...
- ... sei kreativ !!!
Weitere Übungen
Aufgabe 5 - Mathematische Funktionen
Die Klasse Math
stellt einige Klassenmethoden zum Berechnen
mathematischer Funktionen bereit. Dazu gehören z.B. die Methoden
abs(...)
, max(...)
, pow(...)
,
random()
, sin(...)
und sqrt(...)
Finde durch Experimente in der Direkteingabe (Codepad) in BlueJ heraus, was diese bewirken und wie sie zu benutzen sind. Erkläre warum die Java-Entwickler sich dazu entschieden haben diese Methoden als Klassenmethoden bereit zu stellen.
Aufgabe 6 - GeoCalc
Es soll ein Ausschnitt einer Klassenbibliothek zur Berechnung der Eigenschaften verschiedener geometrischer Figuren betrachtet werden:
- Beschreibe die dargestellten Klassen. Benutze dabei unter anderem die Begriffe erben, überschreiben, ergänzen.
- Die Klasse GeoFigur wurde schon implementiert. Ergänze die Klasse
Rechteck
. Die x- und y-Koordinaten stellen bei einem Rechteck immer die linke untere Ecke dar. Die Breite und Höhe geben die Breite nach rechts und die Höhe nach oben an. Zur Abstandsberechnung zum Ursprung soll der Mittelpunkt des Rechtecks herangezogen werden. - Teste die Klassen mit Hilfe der Direkteingabe (Codepad) oder eines Testprogramms ähnlich dem unten dargestelltem (Achtung: dieses enthält bewusst Fehler).
- Beschreibe Zeile für Zeile was im unten dargestellten Testprogramm passiert.
Gehe dabei auf die oben dargestellte Vererbungsbeziehung ein.
Erkläre warum manche Zeilen nicht compiliert werden können, also fehlerhaft sind.
// Zur Erinnerung: // new GeoFigur() ruft den Konstruktor von GeoFigur auf, // erzeugt also ein Objekt der Klasse GeoFigur. // figur.setzeKoordinaten(0, 2) ruft die Methode // "setzeKoordinaten" am Objekt "figur" auf. class Testklasse { Testklasse() { GeoFigur figur = new GeoFigur(); figur.setzeKoordinaten(0, 2); System.out.println(figur.getAbstandZumUrsprung()); Rechteck rechteck = new Rechteck(); rechteck.setzeKoordinaten(-2, 2); rechteck.setzeAusmasse(4, 4); rechteck.verschieben(0, 2); System.out.println(rechteck.getAbstandZumUrsprung()); GeoFigur g = new Rechteck(); g.setzeKoordinaten(0, 1); g.setzeAusmasse(1, 4); Rechteck r = new GeoFigur(); } }
- Ergänze im Klassendiagramm eine Klasse
Kreis
und implementiere sie. Der Abstand zum Ursprung soll vom Kreismittelpunkt berechnet werden. - Zusatzaufgaben:
- Ergänze eine Klasse
Linie
. - Ergänze eine Methode
skalieren(double faktor)
- Macht es Sinn die Klassen
EindimensionaleFigur
undZweiDimensionaleFigur
zu ergänzen?