NextMindAnmelden
ProgrammierenSpielgerüstSpickzettel

Viele auf einmal

Schleifen: die Ringe der Zielscheibe, die Blockreihen und die gestrichelte Mittellinie.

Das kannst du danach

0 von 5 abgehakt
  • Du kannst erklären, warum eine Schleife Wiederholungen im Code ersetzt.
  • Du kannst eine for-Schleife mit Startwert, Bedingung und Veränderung lesen und schreiben.
  • Du kannst entscheiden, wann eine for-Schleife und wann eine while-Schleife passend ist.
  • Du kannst mit einer Schleife Formen in gleichmäßigen Abständen zeichnen.
  • Du kannst Schleifen für ein Bauteil deines eigenen Spiels einsetzen.

Melde dich an, um deinen Stand zu speichern.

Vierzigmal dasselbe

In Kapitel 3 hast du mit if entschieden, was passieren soll. Jetzt kommt ein anderes Problem: Viele Dinge sind gleich. Eine Breakout-Mauer hat mehrere Reihen aus Blöcken, eine Zielscheibe mehrere Ringe und Pong eine gestrichelte Mittellinie.

Du könntest jeden Block einzeln schreiben. Bei 8 Reihen mit je 10 Blöcken wären das aber 80 rect()-Zeilen. Ändert sich später der Abstand, musst du alle anfassen. Ein Programm soll dir solche Arbeit abnehmen.

Erst überlegen

Eine Mauer soll 8 Reihen mit je 10 Blöcken haben. Wie viele rect()-Zeilen bräuchtest du ohne Schleife?

Die for-Schleife

Die Schleife, die du beim Zeichnen am häufigsten brauchst, heißt for-Schleife:

for (int i = 0; i < 5; i++) {
  circle(50 + i * 60, 100, 35);
}

Die drei Teile in den runden Klammern werden von Semikolons getrennt:

  1. int i = 0 — Start: eine Deklaration mit Initialisierung, wie du sie aus Kapitel 2 kennst. Nur steht sie hier in der Klammer und gehört damit ausschließlich der Schleife.
  2. i < 5 — Bedingung: Solange das wahr ist, läuft eine weitere Runde.
  3. i++ — Veränderung: Nach jeder Runde wird i um 1 größer. Dasselbe ++ wie in Kapitel 2, nur jetzt an fester Stelle in der Schleife.

Der Block läuft mit i = 0, 1, 2, 3 und 4: genau fünfmal. Bei i = 5 ist die Bedingung falsch und die Schleife endet.

BeispielFünf Kreise, eine Schleife

Schleifen-Werkzeug

Die while-Schleife

Eine while-Schleife wiederholt ihren Block ebenfalls, solange eine Bedingung wahr ist. Sie schreibt aber Start und Veränderung nicht in eine Zeile hinein — beides steht sichtbar davor beziehungsweise im Block:

int x = 30;

while (x < width) {
  circle(x, 80, 25);
  x = x + 55;
}

Das liest sich wie ein Satz: Solange x noch innerhalb der Fläche liegt, zeichne einen Kreis und gehe 55 Pixel weiter.

BeispielKreise bis zum Rand

Für die meisten Zeichenaufgaben in diesem Kapitel kennst du die Anzahl schon: „fünf Kreise“, „acht Spalten“, „vier Reihen“. Dann ist eine for-Schleife meist klarer. Eine while-Schleife passt besser, wenn nur die Bedingung feststeht, aber noch nicht klar ist, wie viele Runden nötig sind — etwa: „Solange ein Ziel noch zu nah am alten liegt, würfle eine neue Position.“

Die Zählzahl wird zur Position

Die Zählvariable i ist erst einmal nur eine Zahl. Nützlich wird sie, wenn du mit ihr rechnest. Bei 50 + i * 70 ist 50 der Anfang und 70 der Abstand. Die Kreise landen bei x = 50, 120, 190, 260 und 330.

Die Regel ist:

anfang + zaehler * abstand

Vertikal funktioniert es genauso, nur mit der y-Position.

BeispielEine Reihe und eine Spalte

Übung 4.1Level 1Die fehlende Reihe

Zeichne sechs blaue Blöcke in einer Reihe. Jeder Block ist 45 Pixel breit, der Abstand von linker Kante zu linker Kante beträgt 60 Pixel.

Dein VersuchProcessing

Tipp: Strg + Eingabe führt den Code aus.

Eine ganze Mauer

Eine Schleife macht eine Reihe. Für eine Mauer brauchst du Reihen und Spalten. Dazu kann eine Schleife in einer anderen stehen:

for (int reihe = 0; reihe < 4; reihe++) {
  for (int spalte = 0; spalte < 8; spalte++) {
    rect(20 + spalte * 45, 30 + reihe * 28, 38, 20);
  }
}

Die äußere Schleife nimmt sich vier Reihen vor. Für jede davon läuft die innere Schleife komplett durch und zeichnet acht Blöcke. Das Ergebnis sind 4 mal 8, also 32 Blöcke.

Der Ablauf ist wichtig: Die innere Schleife beginnt bei jeder neuen Reihe wieder bei spalte = 0.

Äußere SchleifeInnere Schleife zeichnetErgebnis
reihe = 0spalte = 0 bis 7die oberste Reihe
reihe = 1spalte = 0 bis 7die zweite Reihe
reihe = 2spalte = 0 bis 7die dritte Reihe
reihe = 3spalte = 0 bis 7die vierte Reihe

Stell dir die äußere Schleife als eine Person vor, die in einem Regal eine Etage nach der anderen auswählt. Die innere Schleife läuft dann diese Etage von links nach rechts vollständig ab. Erst danach geht die äußere Schleife zur nächsten Etage.

Erst überlegen

Was wäre anders, wenn die innere Schleife nur bis spalte < 1 statt bis spalte < 8 läuft?

Im folgenden Sketch sind es fünf Reihen statt vier, jede in eigener Farbe — das Prinzip bleibt dasselbe, nur mit einer Zeile mehr else if.

BeispielEine Breakout-Mauer

Hier arbeiten deine bisherigen Werkzeuge zusammen:

  • Die Schleifen bestimmen, wo ein Block liegt.
  • if bestimmt, welche Farbe eine Reihe bekommt.
  • rect() zeichnet den einzelnen Block.

Übung 4.4Level 2Mittellinie für Pong

Zeichne eine gestrichelte Mittellinie für Pong. Sie soll in der Mitte liegen, 6 Pixel breit sein und aus 8 Pixel hohen weißen Strichen bestehen.

Dein VersuchProcessing

Tipp: Strg + Eingabe führt den Code aus.

AufgabenBaue dein Spielfeld weiter

Jetzt bekommt dein eigenes Spiel ein Bauteil, das ohne Schleife zu viel Handarbeit wäre.

Dein Spielin der Processing-IDE

  • Aim Trainer: Zeichne eine Zielscheibe aus mindestens vier Ringen. Die Durchmesser werden in einer Schleife kleiner, die Farben wechseln.
  • Pong: Baue die gestrichelte Mittellinie ein. Ändere Anzahl und Abstand, bis sie auf deinem Spielfeld gut aussieht.
  • Breakout: Zeichne eine Mauer aus mindestens 4 Reihen und 8 Spalten. Gib jeder Reihe eine eigene Farbe.

Schreibe das in deinem Processing-Sketch, nicht nur in den Editor hier. Dein Spiel wächst dort von Kapitel zu Kapitel 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.

Übung 4.2Level 3Ringe der Zielscheibe

Zeichne mit einer Schleife mindestens fünf Ringe einer Zielscheibe um die Mitte. Gib ihnen abwechselnd zwei Farben. Es gibt absichtlich keine Musterlösung: Entscheide selbst über Farben, Größe und Abstand.

Dein VersuchProcessing

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 4.3★ SternaufgabeStern: Schachbrett-Mauer

Zeichne eine 6-mal-8-Mauer, deren Farben wie auf einem Schachbrett wechseln. Du brauchst zwei verschachtelte Schleifen und eine Bedingung.

Dein VersuchProcessing

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.

Was noch fehlt

Die Mauer sieht schon nach Breakout aus. Aber im Code ist sie noch eine Zeichenvorschrift: Alle Blöcke sind gleich, keiner kann einzeln verschwinden und ihre Positionen werden nicht gespeichert.

Im nächsten Kapitel lernst du, viele Werte zu merken: erst mit Arrays für eine feste Anzahl, dann mit ArrayLists für Dinge, die dazukommen oder weggehen. Damit werden aus gemalten Blöcken echte Spielobjekte.

Sitzt das?

1 / 5

Wie oft läuft for (int i = 0; i < 4; i++) { }?