Welcome to GitHub Pages
Inhaltsverzeichnis
- 1. Einleitung
- 2. Stunden-Dokumentation
- 23.01.17
- 26.01.17
- 09.02.17
- 14.02.17
- 16.02.17
- 22.02.17
- 23.02.17
- 01.03.17
- 02.03.17
- 08.03.17
- 09.03.17
- 14.03.17
- 16.03.17
- Einführung in das Programmieren mit Snap!
- Programmieren von Lab1: Building an App
- Programmieren von Lab2: Sprite Drawing and Interaction
- Programmieren von Lab3: Building Your Own Blocks
- 4. Stichwortverzeichnis
1. Einleitung
Das Projekt für das zweite Halbjahr beschäftigt sich damit, weiter Programmieren mithilfe des Online-Kurses "Beauty and Joy of Computing", der an der University of California, Berkeley, entwickelt worden ist, zu lernen. Der gesamte Kurs ist in sieben sogenannte Units aufgebaut, die in weitere Labs mit eigenen Aufgaben unterteilt sind.
In diesem Online-Kurs wird die Programmiersprache "Snap!" verwendet, in deren Gebrauch man in der ersten Unit eingeführt wird. Die Schwierigkeit nimmt mit dem Fortschreiten der Units und Labs stetig zu.
Im Folgenden soll nun zunächst einmal dargestellt werden, wie das Arbeiten mit dem Kurs in den Stunden verlief und außerdem soll es im zweiten Teil eine detailierte Anleitung zum Lösen der einzelnen Aufgaben geben. Zwar werden bei manchen Aufgaben, vor allem bei den Aufgaben am Anfang, Hilfestellungen gegeben, aber dies ist nicht bei allen der Fall, sodass eine fertige Beispiellösung hilfreich sein könnte für diejenigen, die den Kurs ebenfalls machen oder machen werden.
Als letztes wird dann ein Stichwortverzeichnis aufgelistet, in dem man bestimmte Wörter wie in einem Lexikon nachgucken kann.
2. Stunden-Dokumentation
Nachdem wir unsere Entscheidung gefällt haben, den Online-Kurs „Beauty and Joy of Computing“ zu machen, fingen wir in der heutigen Stunde an die erste Unit zu bearbeiten.
Zunächst einmal musste man sich einen Account erstellen und sich anmelden. Anschließend ging es dann mit den ersten Arbeitsaufträgen zum Programmieren selbst los.
Nachdem wir erfolgreich die ersten zwei Teilaufgaben gelöst hatten kam das erste Problem auf. Das Kostüm Alonso sollte gespiegelt werden, was aber nicht funktionierte, da es sich bei dem Format des Costume um eine nicht zu bearbeitende Vektorgrafik handelte. Letztendlich schafften wir es die Grafik zu Spiegeln, allerdings nur indem wir ein eigenes Costume über ein paar Umwege gemacht haben. Dieses war dann der gespiegelte Alonso.
Heute haben wir uns erneut an das "Alonso-Problem" gesetzt und bemerkt, dass es mehrere Costumes gibt, die mit Alonso betitelt sind. Jedoch haben diese jeweils ein anderes Bildformat. Ein Costume war da eben die Vektorgrafik, es gibt aber auch andere. Das hatten wir in der Stunde zuvor nicht bemerkt, weswegen wir das falsche Costume gewählt haben. Nun funktionierte das Wechseln der Costumes auch ganz problemlos.
Neben einigen Dingen, die wir unseren sogenannten Sprite (einer Art Akteur) tun lassen können, haben wir auch den Operator-Block pick random x to y kennengelernt.
Die darauffolgenden Aufgaben des Lab 1 haben wir ohne Probleme bearbeitet.
Als nächstes haben wir mit Unit 1 Lab 2 angefangen. Es ging darum, wie man mithilfe des Sprites Formen zeichnen kann. Nachdem wir das erste Script nachgebaut haben, probierten wir ein wenig selbst aus, was möglich ist.
Damit wir uns nicht zu lange mit der Einführung in Snap! aufhalten, gaben wir uns als Hausaufgabe auf, so viel wie wir schaffen der ersten Unit bis zur nächsten Stunde selbstständig zu bearbeiten.
Wie vereinbart haben wir uns bis zur heutigen Stunde bereits zu Hause mit den weiteren Aufgaben der Unit 1 beschäftigt. Und wie es der Zufall so wollte sind wir beide an der gleichen Aufgabe hängen geblieben. Somit widmeten wir uns in der Stunde dem siebten Arbeitsauftrag der dritten Seite des Labs 3. Es ging darum, ein Script zu bauen, sodass der Sprite eine Spirale malt. Nach einigen Versuchen gelang es uns schließlich, gemeinsam dafür eine Lösung zu finden.
Das nächste Problem kam dann auf, als die Aufgabe lautete, immer größer werdende Quadrate zu zeichnen, sodass ganz innen ein kleines war und nach außen die Quadrate immer größer wurden.
In der heutigen Stunde haben wir noch die dritte Seite des 3. Labs bearbeitet, da wir in der letzten Stunde es nicht ganz geschafft haben, diese zu Ende zu bearbeiten. Es ging darum, einen Block zu programmieren, mit dessen Hilfe man 12 Vielecke zeichnen kann mit immer mehr Seiten. Da eine ähnliche Aufgabe schon zuvor einmal zu bearbeiten war, war diese Aufgabe recht schnell erledigt. Wir haben allerdings noch hinzugefügt, dass man die Seitenlängen beliebig wählen kann.
Jasmin und ich haben heute die Grundlage für ein Tic tac toe Spiel programmiert. Dafür haben wir zuerst einmal den Block draw gameboard with _ tiles of _ per row gebaut, mit welchem wir das Spielfeld mit beliebig vielen Feldern zeichnen können. Als nächstes haben wir eine Kreuz- und eine Kreisgraphik als Costume eingefügt. Diese haben wir in unser Spielscript aufgenommen und dieses so programmiert, dass der Spieler die Kreisgraphik mit der Maus auf das Spielfeld ziehen kann. Nachdem die Grafik losgelassen wird, hinterlässt sie einen Stempel an der Stelle, gleitet zum Startpunkt zurück und wechselt zur nächsten Graphik.
Da Linda diese Stunde nicht da war, habe ich (Jasmin) noch einmal die Übungen aus der letzten Stunde bearbeitet. Dabei wollte ich alternative, vielleicht sogar geschicktere Lösungen für die zu programmierenden Blöcke finden. Eine kleine Verbesserung hab ich dann auch tatsächlich vorgenommen:
Denn bei dem letzten Motion-Block, wo es heißt turn 180 degrees, hatten wir in unserem ersten Script stehen, dass er sich in Richtung von 90° wenden sollte. Dies hätte im Falle, wenn der Sprite beim Start nicht genau senkrecht ausgerichtet wäre, zur Folge, dass die nächste Kästchenreihe nicht genau an der vorigen dran wäre. Dadurch dass er sich jetzt um den bestimmten Betrag von 180° drehen soll, kann das nicht mehr passieren.
Zudem wollte ich versuchen, dass mithilfe des Programms der Ausgangspunkt für das Spielbrett eigenständig berechnet wird, was allerdings bis zum Ende der Stunde nicht geklappt hat.
Heute haben wir mit der zweiten Seite des Lab4 fortgefahren. Im Grunde ging es darum, dass Gameboard auszubauen, z. B. indem man mehr Kästchen und mehr Reihen einbaut und später sollte der Computer mit dem Script selber ausrechnen, wie groß die Kästchen sein müssen, damit die Gesamtgröße dennoch erhalten bleibt.
Am Ende der Doppelstunde waren wir bis auf eine Aufgabe fertig mit der Seite.
In dieser Stunde beendeten wir noch die zweite und letzte Seite des Lab4. Hierbei sollte man den recht allgemeinen Block draw gameboard spezifizieren, sodass man einen Block erhält, der ein Tic Tac Toe Spiel ermöglicht.
Da wir uns dazu entschlossen haben Lab5 zu überspringen, da uns die Aufgaben nicht unbedingt zusagten und wir keinen richtigen Nutzen für uns in ihnen sahen, arbeiteten wir ab heute an der zweiten Unit.
Auf der ersten Seite von Lab1 wurde der if-else-Block eingeführt. Wie der Name schon verrät wird bei diesem Block etwas geprüft. Er funktioniert so, dass, wenn (if) ein bestimmter Zustand zutrifft, eine bestimmte Handlung ausgeführt werden soll. Wenn dies nicht der Fall ist (else) soll eine andere Aktion durchgeführt werden sollen.
Außerdem wurde der Operator-Block repeat until [] eingeführt. Auch hier verrät der Name seine Funktion. Die Handlung wird so lange wiederholt, bis der angegebene Zustand eintritt.
Nach dem wir uns in der heutigen Stunde kurz weiter mit ersten Seite des 1. Labs beschäftigt haben, fingen wir mit der nächsten Seite an. Auf Seite zwei wurden sogenannte Predicates eingeführt, mit welchen wir die Blöcke even? _ und vowel? _ gebaut haben. Diese geben jeweils ein true oder false an, je nach dem was eingegeben wird. Ist die eingegebene Zahl beim ersten Block durch 2 teilbar erscheint ein true, ansonsten wird false angezeigt. Beim zweiten Block passiert das gleiche, nur mit Vokalen und Konsonanten. Mithilfe dieser Blöcke konnten wir den Block join "a" or "an" with _ erstellen. Dieser Block gibt den richtigen Artikel für das eingegebene Wort an.
Heute haben wir uns mit verschiedenen vorgegebenen Scripts auseinandergesetzt und diese nach ihrer möglichen Funktionsweise analysiert. Nachdem wir sie nachgebaut und ausprobiert hatten, sollten wir eigene Scripte bauen, die vorgegebene Kreise in verschiedenen Farben und Größen malen sollten. An bestimmten Stellen im Kreis sollten zum Teil auch Punkte gemacht werden. Da wir anfangs Probleme mit der Koordination der Winkel im Kreis hatten, haben wir für diese Aufgaben etwas länger gebraucht.
In der heutigen Stunde haben wir weiter mit der zweiten Seite des 1. Labs beschäftigt. Die nächste Aufgabe war, ein ähnliches Script wie zuvor zu erstellen, welches den Sprite in bestimmten Abständen another hour has passed sagen lassen soll, während er wieder einen Kreis mit Punkten malt.
Die heutige Aufgabe bestand darin, die list Variable mit dem join "a" or "an" with _ Block zu verknüpfen. In die Liste haben wir zehn verschiedene Tiere eingesetzt und der Block sollte für jedes Tier den passenden Artikel auswählen, je nach Anfangsbuchstaben des Tieres. Mit dieser Aufgabe endete die zweite Seite des 1. Labs. Auf der nächsten Seite sollten wir zuerst den Block Temperatur state of water _ bauen welcher den Agregatzustand von Wasser angibt, je nach eingegebener Temperatur. Als nächstes sollten wir Bilder von einer Ampel als neue Sprites verwenden und einen Block bauen, der die Farbe der Ampel ändert. Der Block traffic signal _ enthält mehrere if-Befehle und je nachdem, ob man red, yellow oder green eingibt, ändert sich der Sprite zu der Ampel mit der entsprechenden Farbe. Was wir den Sprite machen lassen werden, wenn eine komplett andere Farbe eingegeben wird, wissen wir bis jetzt noch nicht.
zurück zum Anfang der Seite
3. Einführung in das Programmieren mit Snap!
Programmieren von Lab1: Building an App
Die erste zu programmierende Aufgabe ist es, ein Script zu bauen, sodass, wenn man den Sprite anklickt, das Costume geändert wird. Aufgrund der sehr detaillierten Anleitungen auf den Aufgabenseiten selbst, wird hier auf genauere Erläuterungen verzichtet und nur das letztendliche Script eingefügt.
Im Folgenden wird der Operator-Block pick random x to y eingeführt. Mit diesem Operator werden Zahlen zufällig im Intervall I=[x;y] gewählt. Setzt man ihn beispielsweise für den Befehlsblock move ein, bewegt sich der Sprite zufällig um eine Länge des Intervalls.
Die folgende Aufgabe funktioniert prinzipiell genauso wie die vorige unter Einbindung des Operators pick random x to y. Auch in diesem Fall ist bereits eine ausfürliche Beschreibung der Schritte vorhanden, weswegen hier wieder nur die Lösung aufgeführt wird.
Als nächstes wird verlangt, dass man ein zweites Script baut, das besagt, dass wenn die grüne Flagge angeklickt wird, der Sprite mit dem Costume Alonso sich an einen bestimmten Ort bewegt und anschließend etwas sagt. Zudem soll die Nachricht verschwinden, sobald man auf Alonso klickt (um das erste Script laufen zu lassen).
Für dieses zweite Script benötigt man zunächst den Control-Blockwhen [grüne Flagge] clicked. Wie die Form des Blocks zeigt, kann dieser nur am Anfang eines Scripts benutzt werden. Er bedeutet, dass, wenn die grüne Flagge angeklickt wird, das Script gestartet wird. Nach diesem Block braucht man dann den Motion-Block go to x:0 y:0, mit dem man dem Sprite eine neue Position zuweisen kann. Unabhängig davon, wo der Sprite sich befindet, begibt er sich direkt zu dem angegebenen Punkt, soblad der Block im Script durchlaufen wird. Für die Werte x und y kann man hier dann die gewünschten "Koordinaten" (in Pixeln) angeben. Anschließend hängt man den Looks-Block say [abc] an das bereits vorhandene Script an und füllt das Feld mit einer beliebigen Nachricht aus.
An das erste Script muss man dann auch noch diesen Block hinzufügen, allerdings mit einem nicht ausgefülltem Feld, damit die vorige Nachricht verschwindet.
Programmieren von Lab2: Sprite Drawing and Interaction
Das Lab2 startet mit dem Arbeitsauftrag, ein vorgegebenes Script (s. unten) nachzubauen und dieses laufen zu lassen. Im Anschluss darauf wird man dazu aufgefordert mit seinem Partner zu analysieren, warum das Script das tut, was es tut.
Die Erklärung lautet folgendermaßen. Zunächst einmal hat man den Control-Block repeat 4. Dieser Block umschließt eine beliebige Anzahl an anderen Blöcken, in diesem Fall sind es die zwei Blöcke move 50 und turn 90. Das Ergebnis, das man bekommt, wenn man das Script laufen lässt, ist, ass der Sprite ein Quadrat macht. Je nachdem, ob man noch zusätzlich den Block pen down vorne an das Script gehängt hat oder nicht, ist es tatsächlich gezeichnet. Somit ist klar, dass der pen down-Block bedeutet, dass der Sprite jedes Mal, wenn er sich bewegt eine Spur bzw. Linie hinterlässt, als würde er einen Stift hinter sich her ziehen. Der folgende repeat 4-Block gibt eine Schleife an. Die Zahl "4" gibt die Anzahl der Wiederholungen an und kann geändert werden. Das Script, das von dem repeat 4 eingeschlossen, ist der Teil der Befehle, der wiederholt werden soll. Dabei wird die Reihenfolge der einzelnen Blöcke stets befolgt. Dies bedeutet für das gesamte Script, dass die Bewegung um 50 Pixel (move 50) und die darauffolgende Drehung um 90° (turn 90) viermal wiederholt werden soll. Aus diesen Befehlen resultiert dann auch das erscheinedende Quadrat, da die Definition von vier gleich langen Seiten damit erfüllt werden.
Um alle Linien wieder zu entfernen, gilt es, den Pen-Block clear anzuklicken. Zudem ist es möglich die Schriftfarbe und Linienbreite mittels der Blöcke set pen color to _ und set pen size to x zu verändern.
Weiter geht es damit, dass man einen Kreis mithilfe des Sprites zeichnen soll. Für die Lösung dieser Aufgabe gibt es zunächst zwei gegebene Tipps, für den Fall, dass man keine Ideen hat. Der Erste besagt, dass ein Kreis eine Art Vieleck ist mit sehr vielen Seiten. Also muss man, um einen Kreis zu zeichnen, verhältnismäßig kleine Seitenlängen und Winkel sehr häufig wiederholen.
Die letzte Aufgabe der ersten Seite lautet, ein Quadrat der Seitenlänge von 100 Pixeln zu zeichnen und darin einen Kreis, der alle vier Seiten berührt.
Eine mögliche Lösung dafür wäre folgende:
Auf der folgenden Seite geht es darum, den Sprite so zu programmieren, dass er einer Bewegung folgt. Die erste Aufgabe lautet, zunächst Vermutungen anzustellen, wie das folgende Script funktioniert, und im Anschluss dieses nachzubauen und auszuprobieren.
Das Script besagt, dass sobald die grüne Flagge angeklickt wurde, der Sprite die x-Position und die y-Position der Maus annehmen soll. Somit wirkt es so, als ob der Sprite der Maus folgen würde. Im Script ist dies in dem Motion-Block go to x:_ y:_ und den jeweils eingefügten Sensing-Blöcken mouse x und mouse y wiederzufinden.
Weiterhin wird verlangt, dass man einen zweiten Sprite kreiert, der stets dem ersten Sprite zugewandt sein soll. Da für die Lösung der Aufgabe in dem Fall bereits wieder recht detaillierte Hilfestelllungen geboten werden, wird hier auf genauere Erklärungen verzichtet. Allerdings wäre anzumerken, dass eine neuer Motion-Block eingeführt wird, nämlich point towards_. In das leere Feld kann man dann reinklicken, sodass man Möglichkeiten aufgelistet bekommt, wohin der ausführende Sprite zeigen soll.
Auf dr nächsten Seite wird das vorige Script modifiziert. Zunächst einmal sollen die Aktionen nur noch so lange asgeführt werden, bis sich die Spritesberühren. Dafür muss der vorige forever-Block durch einen repeat until _-Block ersetzt und in das leere Feld nun den Sensing-Block touching Sprite? eingefügt werden.
Des Weiteren kann man ein eigenes Programm entwerfen bei dem die Sprites miteinander interagieren. Dabei können beispielsweise auch die Costumes verändert werden oder der Hintergrund (funktioniert auf die gleiche Art und Weise wie das Ändern der Costumes(s. Lab1)), die Sprites können sich unterhalten etc..
Aufgrund der ausfürlichen Erklärungen auf der letzten Seite des Labs2 wird hier wiederholt auf weiter ausholende Erklärungen verzichtet. Die Aufgaben handeln davon, dass man beispielsweise repeat-Blöcke ineinander bauen kann, sodass innerhalb einer Schleife eine andere Schleife ausgeführt wird.
Programmieren von Lab3: Building Your Own Blocks
In Lab3 geht es, wie der Name schon sagt, darum seine eigenen Blöcke zu bauen. Dies dient dazu, Scripts, die öfter gebraucht werden könnten, in einem Block zu speichern und somit nicht jedesmal von neuem das Script bauen zu müssen. Außerdem werden weitere Scripts dadurch übersichtlicher. Angefangen wurde mit dem Block draw square welcher aus drei verschiedenen Blöcken besteht. Der move 50 steps und der turn 90 degrees-Block werden in den repeat 4-Block gesetzt, wodurch der Sprite viermal abwechselnd in diesem Fall 50 Schritte macht und sich dann um 90 Grad dreht.
Die nächste Aufgabe gibt ein Script vor, welches analysiert werden soll.
Die nächste Aufgabe bestand darin ein Script zu bauen welches immer größer werdende Quadrate malt, welche sich in keinem Punkt berühren.
zurück zum Anfang der Seite
4. Stichwortverzeichnis
C
Control-Block - Block, welcher das Script steuert, beispielsweise durch Wiederholungen
Costume - auswählbare Computergrafiken, um das Erscheinungsbild des Sprites zu ändern
L
Looks-Block - Block, welcher das Aussehen des Sprites bestimmt
M
Motion-Block - Block, welcher die Bewegung des Sprites steuert
O
Operator-Block - Block, welcher mathematische Funktionen und Textverarbeitungen ausführt
P
Predicates - Reporter, welcher entweder true oder false angibt
S
Script - Abfolge der programmierten Befehlsblöcke, die bestimmte Befehle darstellen
Sound-Block -Block, welcher Soundeffekte beinhaltet
Sprite - Computergrafik, welche die programmierten Aktionen ausführt, beispielsweise Mauszeiger oder Alonso
V
Variable - Block
zurück zum Anfang der Seite