Der erste Pixel
Koordinaten, Formen, Farben - und die ersten Bauteile deines Spiels.
Das kannst du danach
0 von 4 abgehakt- Du kannst das Koordinatensystem von Processing erklären und Punkte darin bestimmen.
- Du kannst Rechtecke, Kreise und Linien gezielt platzieren.
- Du kannst Formen füllen, umranden und Farben mit RGB angeben.
- Du hast das Spielfeld für dein eigenes Spiel gezeichnet.
Melde dich an, um deinen Stand zu speichern.
Zuerst: Wähle dein Spiel
Dieser Kurs läuft auf ein Ziel zu. Am Ende hast du ein eigenes, funktionierendes Spiel geschrieben — und zwar jede Zeile davon selbst.
Entscheide dich jetzt, welches es wird — ein Klick genügt:
Dein Spiel
noch nicht gewähltMelde dich an, um deine Wahl zu speichern.
Jedes Kapitel baut ein Bauteil genau dieses Spiels. Heute: das Spielfeld und die Figuren darauf. Deine Lehrkraft sieht deine Wahl, damit sie weiß, worauf sich deine Fragen beziehen.
Für das fertige Spiel gibt es später ein Spielgerüst zum Kopieren — mit Menü, Spielverlauf und Game Over sauber getrennt. Schau ruhig schon mal hinein; verstehen musst du es erst ab Kapitel 3.
Womit du arbeitest
Du schreibst deine Programme in der Processing-IDE. Die Abkürzung steht für Integrated Development Environment, auf Deutsch integrierte Entwicklungsumgebung. „Integriert" heißt: Mehrere Werkzeuge stecken in einem Programm.
- ein Editor, in dem du den Text schreibst
- ein Übersetzer, der aus deinem Text etwas macht, das der Computer ausführen kann
- die Ausführung selbst — der Knopf mit dem Dreieck
- eine Konsole, in der Fehlermeldungen und deine
println()-Ausgaben landen
Ohne IDE müsstest du diese Schritte einzeln von Hand anstoßen. Genau deshalb gibt es sie.
Das Grundgerüst
Jedes Processing-Programm hat zwei Blöcke:
setup()läuft einmal am Anfang. Hier legst du die Größe der Zeichenfläche fest.draw()läuft danach immer wieder, etwa 60-mal pro Sekunde. Alles, was sich bewegen soll, gehört hier hinein.
void setup() {
size(400, 300);
}
void draw() {
background(240);
circle(200, 150, 80);
}
void heißt: Diese Funktion gibt nichts zurück. Das Semikolon am Ende
jeder Anweisung ist Pflicht — das ist der häufigste Fehler am Anfang.
Das Koordinatensystem
Die Zeichenfläche ist ein Gitter aus Pixeln, und jeder Punkt darauf hat
zwei Zahlen: x von links nach rechts, y von oben nach unten.
Erst überlegen
Auf einer Fläche der Größe 400 × 300 wird ein Punkt bei (100, 50) gezeichnet. Liegt er eher oben oder eher unten?
Das ist die häufigste Stolperstelle am Anfang. Hier ist das Gitter mit
beschrifteter Skala — jede Linie ist 50 Pixel von der nächsten entfernt.
Der grüne Punkt liegt bei (250, 200); such ihn erst auf der oberen und
dann auf der linken Skala:
Jetzt du: im Wechsel ablesen und treffen. Das Raster ist dasselbe wie oben, 50 Pixel je Kästchen.
Es zählen immer nur die letzten sechs Runden — ein Fehlstart lässt sich also wegüben. Sobald vier davon sitzen, färbt sich die Übung selbst grün. Danach kannst du aufhören oder weitermachen, ganz wie du magst.
ÜbungPunkte finden
Wird vorbereitet …
width und height
Sobald size() gelaufen ist, kennt Processing zwei Werte, die du überall
benutzen kannst:
width— die Breite deiner Fläche in Pixelnheight— die Höhe deiner Fläche in Pixeln
Nach size(400, 300) steht in width also die Zahl 400 und in height
die Zahl 300. Du musst dir diese Zahlen nicht merken — du schreibst
einfach width hin, und Processing setzt den passenden Wert ein.
Und weil das ganz normale Zahlen sind, kannst du damit rechnen. Nach
size(400, 300) bedeutet:
width— die volle Breite, also 400. Das ist der rechte Rand.width / 2— die halbe Breite, also 200. Das ist die Mitte von links nach rechts.height— die volle Höhe, also 300. Das ist der untere Rand.height / 2— die halbe Höhe, also 150. Das ist die Mitte von oben nach unten.
width / 2 heißt also schlicht „die halbe Breite" — und die halbe Breite
ist die waagerechte Mitte. Zusammen treffen width / 2 und height / 2
genau den Mittelpunkt der Fläche.
Im folgenden Beispiel zeichnet das Programm seine eigenen Maße mit auf,
damit du siehst, worüber wir reden. Ändere die Zahlen in size() und
drück auf „Ausführen" — der Kreis bleibt in der Mitte, egal was du
einstellst.
Tipp: Strg + Eingabe führt den Code aus.
Der Vorteil zeigt sich genau dann, wenn du size() änderst: Der Kreis
bleibt mittig, ganz ohne dass du irgendeine Zahl nachrechnen musst.
Schreibst du dagegen circle(180, 100, 60), sitzt er nach einer
Vergrößerung plötzlich schief — probier auch das ruhig einmal aus.
Formen zeichnen
Klick auf einen Befehl, dann siehst du ein laufendes Beispiel dazu. Diese Liste ist zum Nachschlagen gedacht — du musst sie nicht auswendig lernen.
Formen
Zum Aufwärmen dieselbe Sorte Übung wie eben bei den Punkten — diesmal mit
Formen. Zwei Dinge werden dabei gern verwechselt, und beide merkt man
erst, wenn das Bild schief aussieht: Bei rect() ist (x, y) die
Ecke, nicht die Mitte. Und bei circle() ist die dritte Zahl der
Durchmesser, nicht der Radius.
ÜbungFormen ablesen
Wird vorbereitet …
AufgabenÜbungen: Formen setzen
Bevor es an die Farben geht: Diese Aufgaben drehen sich nur ums Platzieren. Wer Formen sicher setzt, tut sich mit allem Weiteren leichter.
Übung 1.1Level 1Der Kreis in der Mitte
Setz den blauen Kreis genau in die Mitte der Zeichenfläche.
Tipp: Strg + Eingabe führt den Code aus.
Übung 1.2Level 2Das Rechteck in die Mitte rechnen
Das rote Rechteck soll genau in der Mitte sitzen. Führ den Code erst
einmal aus: Es sitzt daneben, obwohl da width / 2 steht.
Findest du den Grund? Rechne die richtige Position aus — rectMode()
ist hier noch nicht erlaubt.
Tipp: Strg + Eingabe führt den Code aus.
Übung 1.3Level 3Dasselbe mit rectMode
Dieselbe Aufgabe, anderer Weg. Das rote Rechteck rechnet sich die Ecke
aus — das blaue soll mit rectMode(CENTER) an dieselbe Stelle.
Sitzt es richtig, liegen beide exakt übereinander und du siehst nur noch eine Mischfarbe. Ein Rand irgendwo heißt: noch nicht deckungsgleich.
Überleg danach: Welcher Weg ist weniger fehleranfällig, wenn du die Größe des Rechtecks später änderst?
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 1.9Level 4Das Haus vom Nikolaus
„Das ist das Haus vom Ni-ko-laus" — acht Linien, ohne den Stift abzusetzen und ohne eine Linie zweimal zu ziehen.
Probier es erst auf Papier. Und überleg dann, warum es nur klappt, wenn du an einer der beiden unteren Ecken anfängst.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Farben
Farben gibt man als RGB an: drei Zahlen von 0 bis 255 für Rot, Grün und Blau. Ein einzelner Wert bedeutet Grau.
Farben und Linien
Wichtig ist die Reihenfolge: fill() und stroke() gelten ab dem
Moment, in dem du sie aufrufst, für alles Nachfolgende — bis du sie wieder
änderst.
void setup() {
size(400, 220);
noLoop();
}
void draw() {
background(245);
strokeWeight(2);
fill(70, 130, 220); // ab hier ist alles blau
stroke(30, 60, 120);
circle(90, 110, 90);
rect(150, 65, 90, 90);
fill(230, 180, 60); // ab hier gelb
noStroke();
circle(310, 110, 90);
}AufgabenÜbungen: Formen und Farben
Übung 1.4Level 2Pac-Man
Aus einem Kreis wird ein Pac-Man, wenn ein Stück fehlt. Bau ihn mit
arc() — und gib ihm ein Auge.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 1.5Level 3Der Smiley
Mach aus dem gelben Kreis ein lachendes Gesicht. Der Mund soll ein Bogen sein, keine Linie.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 1.6Level 3Die Zielscheibe
Zeichne eine Zielscheibe in die Mitte: mindestens vier Ringe, abwechselnd rot und weiß. Wenn du den Aim Trainer baust, kannst du sie später direkt weiterverwenden.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 1.7Level 3Die Mondsichel
Aus dem Vollmond soll eine schmale Sichel werden — wie am Nachthimmel.
Das ist kniffliger, als es aussieht: Es gibt keinen Sichel-Befehl. Du musst dir mit dem behelfen, was du schon kennst.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 1.8★ SternaufgabeDas Tortendiagramm
Zeichne ein Tortendiagramm mit drei Stücken: 50 % blau, 30 % grün, 20 % rot. Zusammen müssen sie den Kreis genau füllen — keine Lücke, keine Überlappung.
Das erste Stück ist schon da. Der Haken: arc() will nicht wissen, wie
groß ein Stück ist, sondern wo es anfängt und wo es aufhört.
Tipp: Strg + Eingabe führt den Code aus.
Sternaufgabe. Die zählt nicht zum Fortschritt — du verlierst also nichts, wenn du sie auslässt. Schaffst du sie, gibt es dafür einen Stern.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Kommentare
Nicht alles in deinem Quelltext ist für den Computer bestimmt. Mit zwei
Schrägstrichen // schaltest du den Rest der Zeile ab — der Übersetzer
überliest ihn einfach:
// Das hier ist eine Notiz für Menschen
circle(100, 80, 40); // auch hinter Code möglich
Für mehrere Zeilen am Stück gibt es /* und */:
/*
Alles zwischen diesen beiden Zeichenfolgen
wird überlesen, egal wie viele Zeilen es sind.
*/
Kommentare sind aber nicht nur für Notizen da. Der Kniff, den du am häufigsten brauchen wirst, heißt auskommentieren: Du machst eine Zeile vorübergehend zum Kommentar, statt sie zu löschen. So findest du heraus, welche Zeile für welchen Teil des Bildes zuständig ist — und kannst sie danach mit zwei Tastendrücken zurückholen.
void setup() {
size(320, 180);
background(250);
fill(70, 130, 220);
circle(90, 90, 90);
// fill(230, 180, 60);
// circle(230, 90, 90);
}Wie dein Code zum Programm wird
Der Computer versteht deinen Quelltext nicht. Er muss übersetzt werden — und dafür gibt es zwei grundsätzlich verschiedene Wege.
Ein Compiler übersetzt das ganze Programm auf einmal, bevor irgendetwas läuft. Am Ende steht ein fertiges Übersetzungsergebnis, das dann ausgeführt wird. Der Vorteil: Wenn du dich irgendwo vertippt hast, merkt der Compiler das schon beim Übersetzen — dein Programm startet dann gar nicht erst.
Ein Interpreter geht das Programm Zeile für Zeile durch und führt jede sofort aus. Es entsteht kein Zwischenprodukt. Der Vorteil: Es geht sofort los. Der Nachteil: Ein Fehler in Zeile 50 fällt erst auf, wenn das Programm dort ankommt — womöglich mitten im Betrieb.
Auf dieser Webseite passiert übrigens genau das: Dein Processing-Code wird zuerst nach JavaScript übersetzt — das ist die Sprache, die Browser sprechen — und der Browser führt dieses JavaScript dann aus. Für dich bleibt das unsichtbar, du schreibst und siehst überall Processing, genau wie in der IDE.
Jetzt du
Dein SpielDein Spielfeldin der Processing-IDE
Zeichne das Spielfeld deines Spiels — und zwar mit den richtigen Maßen, denn du wirst es in den nächsten Kapiteln weiterbenutzen.
Aim Trainer: eine Fläche mit einem Zielkreis darauf. Der Kreis soll aus mehreren Ringen in verschiedenen Farben bestehen.
Pong: die Fläche, die Mittellinie und die beiden Schläger als Rechtecke.
Breakout: die Fläche, der Schläger unten, der Ball und eine Reihe aus mindestens fünf Blöcken.
Wenn es aussieht wie ein Spielfeld, bist du fertig. Arbeite ruhig in der Processing-IDE — das Ergebnis brauchst du dort ohnehin weiter.
Sichere deinen Code zusätzlich selbst — auf einem Stick oder in deiner Cloud — und lade ihn am Ende auch in den Moodle-Kurs hoch.
Sitzt das?
1 / 5Welcher Befehl legt in Processing die Zeichenfläche an?