Etoys herunterladen =================== Wir benutzen die portable Version von Etoys, die auf Windows, Linux und Mac functioniert. Sie kann [hier](http://www.squeakland.org/content/installers/Etoys-To-Go-5.0.zip) herunter geladen werden. In der heruntergeladenen Datei befindet sich ein Ordner **Etoys-To-Go 5.0.app**. Dieser Ordner muss dorthin kopiert werden, wo die zukünftigen Spiele gespeichert werden sollen. Z.B. auf einen USB-Stick oder in den Dokumente-Ordner. (Es gibt auch Versionen zum Installieren: [squeakland.org](http://www.squeakland.org/download/)) Etoys starten ============= - Im Betriebssystem Windows: In dem Ordner **Etoys-To-Go 5.0.app** befinden sich die Datei **Etoys.exe**. Diese muss doppelt geklickt werden. - Im Betriebssystem Linux: In dem Ordner **Etoys-To-Go 5.0.app** befinden sich die Datei **etoys.sh**. Diese muss ausgeführt werden. - Im Betriebssystem Mac habe ich keine Ahnung. Nach einer Weile öffnet sich dann die Entwicklungsumgebung. ![Etoys Home Screen](images/tutorial/01-EtoysHomeScreen.png) Mit der oberen Leiste von Etoys lohnt es sich zu experimentieren. Die Sprache ändert man, indem man auf ![die Flagge](images/tutorial/Sprache.png) klickt. Ich verwende Deutsch. Im folgenden Bild zeigen Pfeile auf Zahlen und Farben. Diese kann mann auch verändern und sehen, was es für Folgen hat. ![Auto verändern](images/tutorial/02-CarScript.png) Wir werden diese Bausteine im Folgenden benutzen. Pong Projekt anfangen ===================== Pong, weil es Elemente hat, die man in vielen Spielen braucht: - Bewegung - Kollision - Punktestand = Zustand - Tastatur Zuerst machen wir ein neues Projekt. ![Neues Projekt anklicken](images/tutorial/NeuesProjekt.png) Pong ==== Pong ist wie Tennis. Auf beiden Seiten befinden sich Schieber der Spieler. Der Ball prallt an den Schiebern ab. Wenn er aber hinter deinen Schieber bis zum Rand kommt, bekommt der Gegner einen Punkt. So ähnlich wird es aussehen: ![Bild von Pong](http://stream1.gifsoup.com/view2/1999296/pong-o.gif) Teilprobleme, die zusammen das große Problem lösen, wie man Pong baut: - [ein Ball, der sich bewegt](#ballerstellen) - [zwei Schieber, die man steuern kann](#einenschiebererstellen) - [dass der Ball an den Schiebern abprallt](#ballamschieberabprallen) Vielleicht auch auch noch - [Punkteanzeigen für die Spieler](#punktezhlen) Ball Erstellen ============== Also machen wir einen Ball. Form und Farbe sind egal: ![Ball Malen](images/tutorial/03-BallMalen.png) ![OK.](images/tutorial/OK.png) klicken, dann kann der Ball mit der Rechten Maustaste angeklickt werden: ![Ball Rechtsklick](images/tutorial/04-BallRechtsklick.png) Die Halos [Häilos gesprochen], die um den Ball erscheinen, haben auch eine Hilfe und sind nützlich[Das heißt: wenn du viel mit Etoys erreichst, wirst du irgendwann mal alle benutzt haben. Also klicke alle an und sieh was passiert. Unten links ist der Mülleimer.]. Der Pfeil ist die Richtung und der blaue Kreis ist der Drehmittelpunkt. Momentan heißt der Ball aber nicht **Ball** sondern **Zeichnung**. Deswegen wird er umbenannt. Dann wird er später leichter gefunden. ![Ball Umbenennen](images/tutorial/05-BallUmbenannt.png) Der Ball ist ein Objekt, das man rumschieben und mit der Maus anfassen kann. Jedes Objekt kann etwas tun. Um das Verhalten zu sehen, muss man in das Objekt reinsehen. Also klicken wir auf das ![Auge](images/tutorial/auge.png). ![Ball Verhalten geben](images/tutorial/06-BallVerhalten.png) Den Ball Bewegen ================ Damit der Ball selbst was macht (hüstel: automatisches, eigenständiges Verhalten), öffnen wir die Kategorie **Skripte**. ![Auf Tests klicken und Scripte auswählen](images/tutorial/07-BallVerhaltenScripte.png) In den Skripten (keines da bis jetzt), steckt das eigene Verhalten (keines da bis jetzt). Also muss ein neues Skript her. Anklicken, rausziehen, auf die Welt fallen lassen. ![leeres Script rausziehen](images/tutorial/08-ScriptRausziehen.png) Sobald ![Ball | leeres Script](images/tutorial/08-BallLeeresScript.png) über der Welt losgelasssen wird, entsteht ![skript1](images/tutorial/08-BallSkript1.png). Gleich noch weitere Bestandteile hinzufügen: ![](images/tutorial/09-ScriptBewegen.png) Und mir zuliebe nenne ich das, was der Ball tun soll, **bewegen** und füge das Abprallen am Rand hinzu. ![Script benennen](images/tutorial/10-BewegenAbprallen.png) ![Ball | pralle ab](images/tutorial/11-BallPralleAb.png) befindet sich in der Kategorie **Bewegung**. ![](images/tutorial/11-KategorieBewegung.png) Jetzt kann man auf die Uhr ![](images/tutorial/uhr.png) klicken und das Skript läuft automatisch oder man kann es anhalten. Wenn man auf **Normal** klickt, kann man auch einstellen, dass das Skript immer wenn die Maus drüber ist, ausgeführt wird oder einmal, wenn das Projekt geöffnet oder geschlossen wird. Bewegt sich nicht der Ball sondern etwas anderes? Dann könntest du das gemacht haben: ![](images/tutorial/Fehler-01-SkriptEditorEditieren.png) Da steht, dass der **Skripteditor** sich bewegen soll und nicht der Ball. Das passiert, wenn du auf das ![Auge](images/tutorial/auge.png) vom Skripteditor drückst, also nicht den Ball ausgewählt hast. ![Auf die Uhr klicken](images/tutorial/11-BewegenAusfuehren.png) Wenn sich der Ball erstmal bewegt, ist 0 keine sehr spannende Richtung. Verändere die Richtung so, dass sie dir gefällt! ![Die Richtung geht rechts um von 0 bis 359](images/tutorial/Richtung.png) 30 Grad ist eine Richtung, die mir zusagt. Die Richtung kann auch mit dem grünen Pfeil in der Ballmitte verändert werden. Wenn du die Maus lange auf den Pfeil hältst, sagt er dir, dass du die Umschalttaste beim Klicken ziehen musst, um ihn zu verändern. Das ist die Taste, die Buchstaben groß macht. [Meinen Projektstand Herunterladen](pong-zwischenstaende/Pong.001.pr) Geschwindigkeit Einstellen ========================== Der Ball wackelt und bewegt sich langsam. Man kann die Skriptgeschwindigkeit einstellen, damit er nicht ruckt. Drücke lange auf die Uhr ![](images/tutorial/UhrLaeuft.png): ![](images/tutorial/112-BewegenGeschwindigkeit.png) Dein Auge nimmt so 30 Bilder/Sekunde wahr. 25 ist also ausreichend für Menschen. Etoys erneuert das Bild 50 Mal/Sekunde, wenn es nicht viel zu tun hat. Du kannst dir anzeigen lassen, wie of Etoys maximal Bewegungen in der Sekunde anzeigen kann. Ein Bild nennt man Frame. Ein Bildschirm zeigt 60 Bilder/Sekunde an, also 60 Frames/Sekunde. Daraus entsteht dann eine flüssige Bewegung. ![](images/tutorial/11-Systemgeschwindigkeit.png) Das Projekt Speichern ===================== ![Auf den rechten Ordner klicken und speichern.](images/tutorial/12-ProjektSpeichern.png) ![Im Ordner Etoys speichern](images/tutorial/13-ProjektSpeichernOrdnerEtoys.png) Immer speichern, wenn du das Gefühl hast, etwas geschafft zu haben, was du nicht nochmal neu machen möchtest. Das klappt bei mir ganz gut. Jetzt ist der Projektstand im Ordner **Etoys** gespeichert. Dieser befindet sich neben dem Ordner **Etoys-To-Go 5.0.app**. [Solltest du eine installierte Version haben, ist der Ordner **Etoys** im Dokumente-Verzeichnis.] Alle weiteren Speicherstände werden dort abgespeichert. Wenn du jemandem dein Spiel gibst, gibst du ihm am Besten gleich beide Ordner. Wenn er auch Etoys hat, reicht deine letzte Projekt-Datei, die bei mir gerade **Pong.001.pr** heißt. Die Zahl am Ende wird hochgezählt wenn gespeichert wird. So sieht es gerade bei mir aus: ![Zwischenstand](images/tutorial/14-Zwischenstand.png) Einen Schieber Erstellen ======================== Wenn wir erstmal einen Schieber haben, können wir ihn duplizieren. So entsteht später der [zweite Schieber](#zweitenschiebererstellen) schon mit allen den Skripten aus dem ersten Schieber. Weniger Arbeit. Erster Schieber: 1. ![Schieber Malen](images/tutorial/14-SchieberMalenKreis.png) Den Schieber malen [wie wir einen Ball gemalt haben](#ballerstellen). 2. ![Schieber Größe verändern](images/tutorial/14-SchieberMalen.png) die Größe verändern, 3. ![SchieberLinks benennen](images/tutorial/15-SchieberBenennen.png) und richtig nennen. Den Schieber bewegen ==================== Das funktioniert wie [den Ball zu bewegen](#denballbewegen), nur ohne abprallen. So soll es dann aussehen: ![Der Schieber bewegt sich nach oben](images/tutorial/152-SchieberBewegen.png) Wenn Du abprallen mit drin hast, lass es drin. Wenn der Schieber sich irgendwann anders bewegt, könnte es daran liegen. Was auch geht, aber bei größeren Projekten stört, ist, dass der Ball den Schieber bewegt: ![](images/tutorial/153-SchieberNicchtSoGutBewegen.png) Schlecht, weil der Schieber das selbst entscheiden sollte, was er tut. Dann kann man viel leichter herausfinden, warum etwas gerade nicht geht. Geht der Schieber nicht, schaut man beim Schieber.... Ja, der bewegt sich nur nach oben. Aber das soll er nur tun, wenn eine Taste gedrückt wird. Also machen wir zuerst "eine Taste gedrückt wird", und dann machen wir das "wenn". Tastaturanschläge erkennen ========================== Da gemalte Objekte selbst keine Tastaturanschläge erkennen können, holen wir uns ein **Key Press Objekt** [Key Press = Englisch Tasten-Druck]. ![Key Press holen](images/tutorial/16-KeyPressHolen.png) Dazu klicken wir zuerst auf das ![Lager](images/tutorial/lager.png), danach ziehen wir den **Objektkatalog** heraus (das heißt Maus über **Objekt Katalog** tun, linke Maustaste drücken, über das Graue gehen, Maustaste loslassen). Dann auf die Kategorie **Dies und das** klicken. Dort ist der **Key press**. Den auch rausziehen. In den KeyPress schauen wir jetzt rein, indem wir ![Auge](images/tutorial/auge.png) vom Keypress drücken. Man kann es auch oben in der Seitenleiste umbenennen. Objekte sollten immer so heißen, wie das was sie tun/was sie sind. Dieser KeyPress soll den Schieber nach oben bewegen. Die Kategorie Eingabe erreichst du indem du z.B. auf "Tests" oder eine andere Kategorie klickst und die Kategorie **Eingabe** auswählst. ![Key Press inspekten](images/tutorial/17-KeyPressInspekten.png) Was verändert sich, wenn du die Taste drückst? So sieht es jetzt bei mir aus. **Ball bewegen** und **SchieberLinks bewegen** liegen rum, ich habe den **SchieberLinksHoch** inspiziert und auf die orange Box ![](images/tutorial/OrangeBox.png) geklickt: ![](images/tutorial/18-TestEinfuegen.png) [Speichern?](#dasprojektspeichern) Auf Tasten Testen ================= Der Schieber soll nur bewegt werden, wenn die Taste gedrückt wird. Das macht man mit einem Test. Man braucht dazu ![einen Test](images/tutorial/test.png) in ![der orangen Box](images/tutorial/OrangeBox.png) oder der Kategorie **Tests** ![SchieberLinks gehe vorwärts um 5](images/tutorial/SchieberLinksGeheVorwaertsUm5.png) in der Kategorie **Einfach** ![SchieberLinksHoch ist gedrückt](images/tutorial/SchieberLinksHochsTasteIstGedrueckt.png) in der Kategorie **Eingabe** ![das Script zum Schieber bewegen](images/tutorial/182-SchieberBewegenLeer.png) in der Kategorie **Skripte** Um ![SchieberLinksHoch ist gedrückt](images/tutorial/SchieberLinksHochsTasteIstGedrueckt.png) zu erhalten musst du auf den KeyPress namens **LinkerSchieberHoch** rechts-klicken, das ![Auge](images/tutorial/auge.png) anklicken und in die Kategorie **Eingabe** gehen. ![](images/tutorial/183-SchieberLinksHochErklaert.png) Danach kannst du ![SchieberLinksHoch ist gedrückt](images/tutorial/SchieberLinksHochsTasteIstGedrueckt.png) rausziehen. Zusammen stecken und so sieht es dann aus: ![einen Test](images/tutorial/19-SchieberBewegen.png) Schieber Steuern ================ Es gibt einen Halo namens "duplizieren" ![](images/tutorial/duplizieren.png). Damit können wir kopieren, was wir schonmal gemacht haben. Damit der Schieber sich nach unten bewegt, muss man den KeyPress duplizieren und den Test auf den Tastendruck. Der Test muss dazu aus dem Skript genommen werden. ![](images/tutorial/20-Duplizieren.png) Dann benenne ich den anderen KeyPress um zu **LinkerSchieberRunter** und erstellen eine Kachel indem ich auf ![](images/tutorial/kachel.png) drücke. ![Kachel erstellen](images/tutorial/21-KachelErstellen.png) Mit diesen Dingen kann der Schieber hoch und runter gehen: ![Das Script zum Schieber bewegen](images/tutorial/182-SchieberBewegenLeer.png) ![KeyPress](images/tutorial/KeyPress.png) LinkerSchieberRunter ![KeyPress](images/tutorial/21-KeyPressQ.png) LinkerSchieberHoch ![Test bewegen auf Tastendruck](images/tutorial/22-Test.png) zwei mal ![LinkerSchieberRunter Kachel](images/tutorial/23-LinkerSchieberRunter.png) diese Kachel mit ![](images/tutorial/kachel.png). Man kann die Kachel **LinkerSchieberRunter** auf die **KachelLinkerSchieberHochs** ziehen und fallen lassen, damit wird ersetzt: ![](images/tutorial/232-HinweisKeyPressErsetzen.png) Negative Zahlen eignen sich um Rückwärts zu gehen. Andere Lösungen sind bestimmt auch richtig, solange sich der Schieber in beide Richtungen bewegt. So mache ich das: ![LinkerSchieberRunter Kachel](images/tutorial/24-Loesung.png) [Speichern?](#dasprojektspeichern) Zweiten Schieber erstellen ========================== Der zweite Schieber kann erstellt werden, indem man den einen Schieber dupliziert ![](images/tutorial/duplizieren.png) oder alles nochmal von [vorn](#einenschiebererstellen) macht. Danach muss man noch mehr duplizieren und ersetzen und dann funktioniert er mit anderen Tasten. Alles haben wir vorher schon gemacht. Die beiden beiden Key-Press-Objekte müssen auch dupliziert werden. Benutze die Kacheln von ![](images/tutorial/kachel.png) zum Ersetzen. Öffne die Kategorie Skripte wenn du den anderen Schieber inspizierst![](images/tutorial/auge.png). Ziehe das Skript **bewegen** raus. Schaue, wie wir es [vorher](#schiebersteuern) gemacht haben. ![](images/tutorial/25-ZweiterSchieber.png) Ball Am Schieber Abprallen ========================== Der Ball soll wie im folgenden Bild am Schieber abprallen, wenn er den Schieber berührt. Die schwarz-weiße Richtung heißt **Schiebers Richtung zu Ball**. ![](images/tutorial/28-Hinweis.png) Damit der Ball am Schieber abprallt, muss man die Ball-**Richtung setzen**. Dafür zieht man den Pfeil ![](images/tutorial/Zuweisungspfeil.png) raus. Wenn man Werte in einem Skript ändern will, braucht man immer den ![grünen Pfeil](images/tutorial/Zuweisungspfeil.png). ![](images/tutorial/26-RichtungSetzen.png) In den Kategorien **Tests**, **Beobachtung** und **Skripte** kann man diese Bauteile erhalten erhalten: ![](images/tutorial/27-Bauteile.png) ![Die Ball Kacheln](images/tutorial/BallKachel.png) gibt es in ![der orangen Box](images/tutorial/OrangeBox.png) und durch ![](images/tutorial/kachel.png). Immer wenn **SchieberLinks** vorne in der Kachel steht, findet man sie, wenn man auf ![das Auge](images/tutorial/auge.png) vom Objekt namens **SchieberLinks** klickt. Sowas gilt auch für **Ball** und alle anderen Objekte. Für ![](images/tutorial/27-BallsRichtung.png) muss man auf den Ball rechts-klicken, ![das Auge](images/tutorial/auge.png) klicken und in der Kategorie **Einfach** den ![Pfeil](images/tutorial/Zuweisungspfeil.png) rausziehen. ![](images/tutorial/27-SchieberLinksRichtungZuPunkt.png) ist im **SchieberLinks** ![](images/tutorial/auge.png) in der Kategorie **Beobachtung**. ![](images/tutorial/27-SchieberLinksUeberlapptPunkt.png) ist in der Kategorie **Tests**. Nun wird die neue Richtung vom Ball gesetzt: ![SchieberLinksRichtungZuPunkt wird auf die Zahl von Balls Richtung gezogen.](images/tutorial/27-RichtungAufSchieberZiehen.png) ![Punkt wird durch Ball ersetzt.](images/tutorial/27-SchieberLinksRichtungZuBall.png) **Punkt** macht keinen Sinn und wird durch **Ball** ersetzt. Damit stecke ich das Abprallen am **SchieberLinks** zusammen. ![](images/tutorial/28-Loesung.png) Das Gleiche kann man noch für den anderen Schieber machen. Diesmal kann man duplizieren ![](images/tutorial/duplizieren.png) und die Kacheln erstellen mit ![](images/tutorial/kachel.png). ![](images/tutorial/29-BeideSchieber.png) Manchmal prallt der Ball unschön oben oder unten ab und geht ewig hin und her. Das liegt daran, wo die Mitte des Schiebers liegt, da die Richtung von der Mitte aus berechnet wird. Die Mitte kann aber verschoben werden: ![](images/tutorial/30-MitteVerschieben.png) Es kommt eine Hilfeblase, wenn die Maus länger über der Mitte ist. Um die Mitte zu verschieben, die Umschalttaste drücken, während die Maus an der Mitte zieht. [Speichern?](#dasprojektspeichern) Punkte Zählen ============= Wenn der Ball hinter einen Schieber kommt, sollen die Punkte für den anderen hochgezählt werden. Wir brauchen dazu ein Text-Objekt. ![](images/tutorial/auge.png) Dieses kann auch Zahlen anzeigen: ![](images/tutorial/31-Text.png) ![](images/tutorial/32-TextInspizieren.png) Ich nenne den Text **PunkteRechts**. Den Zahlenwert brauchen wir. Außerdem brauchen wir die Ränder. Die können schöner aussehen. Es sind zwei Rechtecke, die **LinkerRand** und **RechterRand** heißen: ![](images/tutorial/33-Raender.png) Die Rechtecke gibt es im Lager. Um den Zahlenwert um 1 zu erhöhen, kann man folgendes machen: ![](images/tutorial/34-ZahlenwertErhoehen.png) ![](images/tutorial/35-ZahlenwertErhoehen.png) Mit diesen Sachen kann man schon eine Punkteanzeige bauen: ![](images/tutorial/35-ZahlenwertErhoehen.png) ![](images/tutorial/36-LinkerRand.png) ![](images/tutorial/36-RechterRand.png) ![](images/tutorial/29-BeideSchieber.png) Benutze Tests aus ![der orangen Box](images/tutorial/OrangeBox.png). Durch ![](images/tutorial/kachel.png) (mit Rechtsklick auf die Objekte) erhältst du die erforderlichen Kacheln. Nutze die Bausteine aus dem Ball-Skript oder den Kategorien **Tests**, **Beobachtung** und eventuell **Scripte**. So habe ich das gemacht: ![](images/tutorial/37-Loesung.png) Es entsteht ein neues Problem: der Ball hat bei mir gerade 32 Punte vergeben, als er den linken Rand berührt hat. Es sollte aber nur ein Punkt sein. Man kann das Problem lösen, 1. indem man nur 1 Mal den Wert erhöht, solange der Ball den Schieber berührt. Dadurch müsste man sich aber merken, ob man schonmal hochgezählt hat, 2. indem der Ball wieder in die Mitte gesetzt wird. Ich mag Nummer 2. Ball Zurück Setzen ================== Um den Ball zurück in die Mitte zu setzen, braucht man die Position der Mitte. In der Kategorie **Mehr Geometrie** befindet sich die Position des Balles und wenn wir ihn in die Mitte tun, auch die Position der Mitte. ![](images/tutorial/38-PositionBestimmen.png) Indem ich den ![Zuweisungspfeil](images/tutorial/Zuweisungspfeil.png) anfasse, ziehe ich die Zuweisung hinaus und füge sie in das Ball-Skript ein. An zwei Stellen im Skript muss die Position des Balls auf die Mitte gesetzt werden. ![](images/tutorial/39-BallGehtInDieMitte.png) Zwischenstand ============= Mein Spiel mit allem, was es hat sieht gerade so aus: ![](images/tutorial/40-Zwischenstand.png) Was kann noch dazu? - Ein Spiel-Starten-Button, der den Punktestand zurück setzt. - Ein Spielende, wenn jemand gewonnen hat. (Mache ich nicht.) [Meinen Projektstand Herunterladen](pong-zwischenstaende/Pong.003.pr) Spiel Starten Button ==================== Aus den Kategorien **Skripte**, **Text** und **Mehr Geometrie** habe ich mir folgendes Skript zusammengebaut: ![](images/tutorial/41-StartenScript.png) Den Knopf, der entsteht, wenn ich auf **Knopf, um dieses Skript auszuführen** klicke, tue ich irgendwo hin, wo es gut ausschaut. ![](images/tutorial/42-Zwischenstand.png) [Meinen Projektstand Herunterladen](pong-zwischenstaende/Pong.004.pr) Wie Gehts weiter? ================= Du hast jetzt die Grundlagen zur Programmierung mit EToys. Wenn du [speicherst](#dasprojektspeichern) und dann ![](images/tutorial/ProjektZurueck.png) drückst, kommst du zurück zur ersten Welt. In ![der Projektgalerie](images/tutorial/Projektgalerie.png) mag ich ![die Etoys Challenge](images/tutorial/43-EtoysChallenge.png) aber es gibt auch ![Anleitungen und Beispiele](images/tutorial/AnleitungenUndBeispiele.png) Hoffentlich habe ich genug gezeigt, wie man ein eigenes Spiel macht. Was noch interessant sein könnte: - Animationen (finden sich in der Projektgalerie) - Du kannst Bilder reinladen: Fotografieren und in Etoys reinwerfen oder die Kamera im Objektkatalog verwenden. - Neue Sounds machen mit dem Klangrecorder aus dem ![Lager](images/tutorial/lager.png). - Gravitation (will ich noch erklären) - Variablen - dazu kann ich ein Snake-Tutorial machen. - [Hier finden sich noch mehr Tutorials auf Deutsch.](http://etoysillinois.org/library?tags=Etoys+Kurzanleitungen+2010) - [Wenn du Interesse an anderen Programmiersprachen und Organisationen hast, die dir was beibringen.](http://jugendprogrammiert.weebly.com/) - Volleyball, Autorennen, Ballerspiel, Angry Birds. - Lass mich bitte wissen, was du noch für Ideen hast, damit ich sie hier hin tun kann. Ganz unten erreichst du meine Seite mit einer meiner Email-Adressen.