Aufgabenblatt 4 - Funktionen und Objektorientierung Aufgabe 1 Fingerübungen 1. Ergänze den folgenden Code, indem du die Funktionen drawrandomshape und randomcolor implementierst. void setup () { size (400,300); } void draw () { drawrandomshape ( random ( width ), random ( height ), randomcolor ()); } 2. Erstelle eine Klasse Ball, mit den Variablen x und y für die Position des Balls und vx für die Geschwindigkeit in x-richtung. Gib der Klasse außerdem noch eine Methode display, die den Ball an seiner aktuellen Position zeichnet und eine Methode move, die den Ball bewegt indem vx auf x aufaddiert wird. Wenn der Ball dabei die Grenzen des Fensters verlässt, soll die Geschwindigkeit umgekehrt werden. Erstelle in setup ein Ball-Objekt und simuliere seine Bewegung, indem du in draw die Methoden move und display aufrufst. 3. Erweitere das Programm aus Fingerübung 2, indem du mehrere Bälle mit unterschiedlichen y- Werten simulierst. Danach kannst du ihnen auch noch eine Geschwindigkeit vy in y-richtung geben, um sie wild durchs Bild springen zu lassen. Aufgabe 2 Pumpendes Herz Zeichne die Umrisse eines realistischen Herzens und lasse das Herz pumpen. Die einfachste Variante ist, das Herz einfach kleiner und größer zu skalieren. Vielleicht kannst du aber auch eine Regel finden, die ein realistischeres Pumpen simuliert. Aufgabe 3 Brückenkurs-Quiz Schreibe ein Quiz, bei dem auf dem Bildschirm immer eine Frage und vier mögliche Antworten angezeigt werden. Klickt man auf eine Antwort, wird angezeigt ob diese die richtige war und die nächste Frage erscheint. Zähle dabei mit, wie viele Fragen der Benutzer richtig beantwortet hat und wie viele falsch waren. Als Fragen kannst du Inhalte des Brückenkurses nehmen (z.b. Welches dieser Zeichen ist kein Java-Operator? ). Aufgabe 4 Roboterarm Schreibe ein Processing-Programm, das einen Roboterarm mit vier Gelenken simuliert. Der Benutzer soll den Arm bewegen können, indem er mit den Zahlentasten 1 bis 4 ein Gelenk auswählt Aufgabenblatt 4 - Funktionen und Objektorientierung 1/ 7
und mit den Pfeiltasten die Gelenkstellung ändert (größerer/kleinerer Winkel). Zeichne auch eine kleine Kiste, die der Benutzer mit dem Roboterarm aufheben muss. Hinweis: Am direktesten kannst du den Arm darstellen, wenn du für jedes Segment einfach nur ein Rechteck zeichnest, das mit den Funktionen translate und rotate an die richtige Stelle gebracht wird. Aufgabe 5 Kanonenspiel Schreibe ein Spiel, bei dem der Benutzer mit der Maus eine Kanone ausrichten und mit einem Klick abfeuern kann. Ziel des Spiels ist es, eine Zielscheibe zu treffen. Du kannst das Spiel noch interessanter machen, indem du z.b. das Ziel sich bewegen lässt oder Wind einbaust, der sich bei jedem Schuss wieder ändert. Hinweis: Die Kanonenkugel bekommt von der Kanone eine Initialgeschwindigkeit. Ab diesem Zeitpunkt wird diese Geschwindigkeit nur noch von der Gravitation beeinflusst (Beschleunigung nach unten). Aufgabe 6 Netzwerksimulation Schreibe eine kleine einfache Simulation eines Netzwerks aus mehreren Rechnern. Du kannst die Rechner einfach als Rechtecke darstellen, die mit Linien verbunden sind. Zwischen den Rechnern sollen Nachrichten als kleine Kreise hin und her wandern können. Stelle zunächst einen einfachen Ping zwischen zwei Rechnern dar: Der erste Rechner schickt eine Anfrage und der zweite Rechner antwortet auf diese Anfrage. Wenn du dieses Programm mit Funktionen und Klassen strukturierst, wird es dir sicher leicht möglich sein, größere Netzwerke zu simulieren. Vielleicht kannst du sogar einen TCP-Handschake Aufgabenblatt 4 - Funktionen und Objektorientierung 2/ 7
(SYN, SYN-ACK, ACK) darstellen? Aufgabe 7 Räuber-Beute-Simulation Programmiere eine einfache Räuber-Beute-Simulation. Teile dazu den Anzeigebereich in ein Gitter ein, auf dem sich Beutetiere und Räuber bewegen können. Sowohl Raubtiere als auch Beutetiere können sich pro Schritt um ein Feld vorwärts bewegen. Beutetiere müssen Nahrung finden und fressen, um sich dann vermehren zu können. Räuber müssen Beutetiere fressen und vermehren sich langsamer als die Beutetiere. Du kannst für eine einfache Simulation einfach zufällig Nahrung, Räuber und Beute in den Gitterfeldern verteilen und Räuber- und Beutetiere sich zufallsgesteuert bewegen lassen. Du kannst aber natürlich danach auch versuchen, den Tieren noch ein wenig mehr Intelligenz mit auf den Weg zu geben. Aufgabe 8 Ampelschaltung Simuliere eine Kreuzung auf der Autos von allen Richtungen zufahren. Du kannst dabei annehmen, dass alle Autos nur geradeaus fahren und niemals abbiegen. Kollisionen sollen dabei kenntlich gemacht werden. Füge jetzt im nächsten Schritt eine Ampel an der Kreuzung ein und baue die Ampelschaltung so, dass keine Unfälle mehr entstehen. Kannst du das Programm noch erweitern, so dass manche Autofahrer doch abbiegen können? Aufgabe 9 Aufzug Simuliere einen Aufzug in einem Hochhaus. Der Benutzer soll in jedem Stockwerk auf einen Knopf drücken können, um den Aufzug zu rufen. Was macht der Aufzug, wenn er zu mehreren Stockwerken gleichzeitig gerufen wird? Wenn du möchtest, kannst du auch kleine Strichmännchen animieren, die den Aufzug betreten und verlassen. Aufgabe 10 Hau den Maulwurf Programmiere eine Variante des Spiels Hau den Maulwurf, bei dem Maulwürfe oder andere schlagenswerte Figuren aus Löchern im Boden auftauchen und der Benutzer sie schnell genug Aufgabenblatt 4 - Funktionen und Objektorientierung 3/ 7
durch klicken der Maustaste treffen muss. Aufgabe 11 Taschenrechner Programmiere einen voll funktionstüchtigen Taschenrechner. Kannst du es schaffen, dass man das Gefühl hat, die Tasten werden wirklich nach unten gedrückt, wenn man mit der Maus darauf klickt? Aufgabe 12 Förderband Programmiere ein Förderband, auf das der Benutzer per Drag&Drop kleine Kisten legen kann. Es reicht dabei aus, wenn das Förderband nur aus horizontalen und vertikalen Streifen zusammengesetzt ist. Aufgabe 13 Paprikafarm Programmiere ein Bewässerungssystem für eine spanische Paprikafarm. Stelle die Pflanzen grafisch dar zusammen mit einem Feuchtigkeitsmessstab. Mit der Zeit sollen die Paprika langsam austrocknen. Das Bewässerungssystem soll dafür sorgen, dass immer genug Wasser vorhanden ist, aber auch nicht zu viel. Programmiere Warnmeldungen für beide Fälle ein und implementiere dann das Bewässerungssystem selbst. Es wäre allerdings natürlich ineffizient, das System ständig für ganz kurze Zeitspannen anspringen zu lassen. Baue daher auch einen zeitlichen Mindestabstand zwischen zwei Bewässerungsphasen ein. Aufgabe 14 Verbrennungsmotor Simuliere grafisch die Funktionsweise eines typischen Viertakt-Ottomotors. Aufgabe 15 Türme von Hanoi Das Spiel Die Türme von Hanoi basiert auf einfachen regeln. Es gibt drei Stangen, wobei auf der ersten Stange mehrere Scheiben mit einem Loch in der Mitte aufeinandergestapelt sind. Die Scheiben haben unterschiedliche größe, wobei die größte Scheibe immer unten liegt. Der Spieler muss alle Scheiben vom Startstapel (links) auf den rechten Stapel legen. Dabei kann er immer nur die oberste Scheibe von einem Stapel aufnehmen und darf nie eine größere Scheibe auf eine kleinere legen. Aufgabenblatt 4 - Funktionen und Objektorientierung 4/ 7
Programmiere dieses Spiel, indem der Benutzer jeweils auf den Stapel klicken kann von dem er eine Scheibe nehmen kann, um dann auf den Stapel zu klicken, wo er sie ablegen möchte. Aufgabe 16 Minigolf Programmiere ein Minigolfspiel. Es reicht dazu, wenn du die Ränder von Hindernissen als Linien darstellst und in jedem Schritt prüfst ob diese den Ball berühren. Ist dies der Fall, prallt der Ball an der Wand im gleichen Winkel ab, mit dem er aufgetroffen ist. Aufgabe 17 Logische Schaltkreise Simuliere einen logischen Schaltkreis, indem du die folgenden Elemente (sinnvollerweise als Klassen) definierst. Ein Taktgeber, dessen Ausgang bei einem Rechtsklick von 0 zu 1 und bzw. umgekehrt von 1 zu 0 wechselt. Ein Schalter, den der Benutzer durch Linksklick mit der Maus an und ausschalten kann. Ein NOT-Gatter, das den Eingabewert umkehrt. Ein AND-Gatter, das nur 1 ausgibt, wenn beide Eingänge den Wert 1 haben. Sonst ist die Ausgabe 0. Ein OR-Gatter, das nur 0 ausgibt, wenn beide Eingänge den Wert 0 haben. Sonst ist die Ausgabe 1. Ein Eingabesignal, das dauerhaft entweder 1 oder 0 ausgibt. Jedes dieser Elemente soll grafisch dargestellt werden, wobei Verbindungen, die den Wert 1 haben, rot markiert werden sollen. Kannst du auf diese Weise einen Schaltkreis bauen, der zwei 3-Bit zahlen addiert? Aufgabe 18 Labyrinth Schreibe ein Spiel, bei dem man sich mit einer Figur durch ein Labyrinth bewegen und den Ausgang suchen muss. Um das Spiel interessanter zu machen, kannst du auch noch Gegner einbauen und Objekte, die man aufsammeln kann ähnlich wie bei Pacman. Aufgabenblatt 4 - Funktionen und Objektorientierung 5/ 7
Aufgabe 19 Schwarmverhalten Das Schwarmverhalten von Vögeln oder Fischen lässt sich mit drei erstaunlich einfachen Regeln simulieren, denen jedes Individuum folgt: Kohäsion: Bewege dich in Richtung des Zentrums deiner Nachbarn. Separation: Bewege dich weg, wenn dir jemand zu nahe kommt. Alignment: Bewege dich etwa in die selbe Richtung wie deine Nachbarn. Simuliere basierend auf diesen Regeln einen Schwarm. Aufgabe 20 Space Invaders Programmiere ein Spiel bei dem der Spieler mit einem Raumschiff durchs Weltall fliegt und aus der Vogelperspektive Sterne an sich vorbei fliegen sieht. Setze dann gegnerische Raumschiffe in die Welt ein, denen man ausweichen muss und die man selbst abschießen kann. Aufgabe 21 Snake Programmiere das Spiel Snake nach. Dabei bewegt sich eine Schlange auf einem Raster in horizontaler bzw. vertikaler Richtung. Der Spieler kann die Richtung mit den Pfeiltasten wechseln und muss Futter aufsammeln, was die Schlange jedes mal um ein Kästchen größer werden lässt. Trifft der Spieler dabei den Schwanz der Schlange oder die Wand, hat er das Spiel verloren. Aufgabenblatt 4 - Funktionen und Objektorientierung 6/ 7
Aufgabe 22 Schiffe Versenken Programmiere das Spiel Schiffe versenken. Zeige dabei abwechselnd den Spielzustand für Spieler 1 und für Spieler 2 wenn der jeweilige Spieler an der Reihe ist. Es muss möglich sein auf einem zweidimensionalen Feld Schiffe von unterschiedlicher Größe zu platzieren und dann durch Mausklick auf einzelne Positionen zu feuern, wobei immer angezeigt wird ob man ein gegnerisches Schiff getroffen hat oder nicht. Aufgabe 23 Mastermind Mastermind ist ein bekanntes Knobelspiel. Es geht dabei darum, eine Kombination von vier farbigen Kugeln zu erraten. Der Mastermind wählt sich eine Kombination und der Gegenspieler versucht in jedem Zug diese Kombination zu erraten. Der Mastermind muss seinem Gegner dabei wahrheitsgemäß sagen, wie viele Kugeln eine Farbe haben, die in der gesuchten Kombination vorkommt und wie viele Kugeln tatsächlich völlig richtig platziert wurden (Farbe und Position). Programmiere das Spiel nach, wobei der Rechner die Rolle des Mastermind übernimmt. Aufgabe 24 Zombieepidemie Simuliere den Ausbruch einer Zombieepidemie. Platziere dazu Menschen an zufälligen Positionen, die sich frei in zufällige Richtungen bewegen können. Durch einen Mausklick kann der Benutzer beliebige Menschen infizieren und sie zu Zombies machen. Zombies bewegen sich auch zufällig - außer sie sehen einen Menschen in ihrer Nähe, dann bewegen sie sich direkt auf ihn zu und versuchen ihn zu beißen. Du kannst bei einem Kampf von Mensch und Zombie eine Wahrscheinlichkeit dafür einbauen, dass der Mensch gebissen wird oder dass er den Zombie töten kann. Hinweis: Am schönsten sieht die Bewegung der Figuren aus, wenn du die Fortbewegungsgeschwindigkeit von der Richtung der Fortbewegung trennst und nur die Richtung zufällig veränderst. Aufgabenblatt 4 - Funktionen und Objektorientierung 7/ 7