Struktur I

Zufall, Textausgabe, Variablen, if, else, else if, Wiederholung, Verschachtelte Wiederholung

Zufall

Zufallszahlen erzeugen mit random(). Liefert Zufallszahlen aus einem bestimmten Bereich (von...bis), die Grenzen können festgelegt werden. Z.B. eine Zufallszahl zwischen 0 und der Fensterbreite:

random(0,width);

Benutzen wie eine Zahl. Beim Zeichnen...

rect(random(10,width-10), random(10,height-10), 20, 20);

...beim Festlegen von Farben...

noStroke();
background(255);
fill(random(0,200));
rect(random(10,width-10), random(10,height-10), 20, 20);

...oder in Variablen.

Wenn die Untergrenze 0 ist...

random(0,1000);

...kann sie weggelassen werden.

random(1000);

Debug: Textausgabe

Zufallszahlen (und eigentlich alle Zahlen) anschauen mit print/println (mit und ohne Zeilenende).

println(random(100));
println(" ist eine Zufallszahl.");

print(random(100));
println(" ist eine Zufallszahl.");

Variablen

Deklarieren: es gibt etwas mit einem Namen und einem Typ, z.B. mit Komma (float) oder ohne (int).

int px;

float py;

initialisieren (Wert zuweisen/speichern), ...

px = 30;

py = 35.0;

benutzen.

point(px,py);
ellipse(px+30,py+30,20,20);

Mit dem Ergebnis einer Funktion füllen, benutzen (z.B. in ellipse) und ausgeben (mit println).

float px;
px = random(100);

float py = random(100);

println(px+" und "+py);

ellipse(px,py,20,20);

Rechnen: plus +, minus -, mal *, geteilt /.

float px = width/2;
float py = height/2;

noStroke();
fill(0);
rectMode(CENTER);

rect(px,py,width-px*0.5,height-py*0.5);

Achtung: beim Rechnen mit float und int wird alles float.

int zahl = 10;
println(zahl);

float kommazahl = 10;
println(kommazahl);

println(zahl+kommazahl);

Beim Rechnen mit int wird abgerundet.

int zahl = 10;
int zweiteZahl = 3;
println(zahl/zweiteZahl);

Umwandeln mit float() oder int().

int zahl = 10;
int zweiteZahl = 3;
println(zahl/float(zweiteZahl));
println(int(zahl/float(zweiteZahl)));

Variablen müssen nicht zwangsläufig reine Zahlen sein. Beispiel: Farbe

color hintergrund = color(255,100,0);
background(hintergrund);

color vordergrund = color(random(255),random(255),random(255));
noStroke();
fill(vordergrund);
rect(10,10,80,80);

Fallunterscheidungen - Entweder: if...

Fragen stellen

if (Ja/Nein-Frage)

Es folgt eine Sequenz mit Anweisungen. Damit kenntlich ist, dass die Sequenz zur Frage gehört, wird sie in {} eingeschlossen.

if (Ja/Nein-Frage) {
  Anweisung1;
  Anweisung2;
  Anweisung3;
}

Zum Beispiel

float zahl = random(100);

if (zahl < 50) {
  point(30,35);
  line(10,70,80,30);
  ellipse(60,65,20,20);
}

...oder: else

Wenn die Frage mit ja beantwortet wird, führe den ersten Block aus, ansonsten den zweiten.

if (Ja/Nein-Frage) {
  Anweisung1;
  Anweisung2;
  Anweisung3;
} 
else {
  AndereAnweisung1;
  AndereAnweisung2;
  AndereAnweisung3;
}

Zum Beispiel

float zahl = random(100);

if (zahl < 50) {
  ellipse(60,65,20,20);
}
else {
  rect(60,65,20,20);
}

Mehrere Alternativen: if, else if, else

Wenn die Frage mit ja beantwortet wird, führe den ersten Block aus, ansonsten den zweiten, aber nur, wenn eine weitere Frage mit ja beantwortet wird. Usw.

if (Ja/Nein-Frage) 
{
  Anweisung1;
  Anweisung2;
  Anweisung3;
} else if (neue Frage) {
  AndereAnweisung1;
  AndereAnweisung2;
  AndereAnweisung3;
}
Zum Beispiel
float zahl = random(100);
if (zahl < 30) {
  ellipse(60,65,20,20);
} else if (zahl < 60) {
  rect(60,65,20,20);
} else {
  line(60,70,60,60);
  line(55,65,65,65);
}

Schleifen: Wiederholung

Statt:

size(400, 200);
background(255);

line(5,5,5,195); 
line(15,5,15,195);
line(25,5,25,195);
line(35,5,35,195);
line(45,5,45,195);
line(55,5,55,195);
// usw...

...eine Sequenz, die wiederholt wird:

for (Variable zum Zählen; Frage wann Ende; Art des Zählens) {
  Anweisung1;
  Anweisung2;
  Anweisung3;
}
size(400, 200);
background(255);

for (int i=0; i < 400; i = i+10) {
  line(5+i,5,5+i,195); 
}

Wobei mit i gerechnet werden kann (5+i*10) und i = i + 1 meist abgekürzt wird: i++

for (int i=0; i < 10; i++) {
  line(5+i*10,5,5+i*10,195); 
}

Allerdings kann sich i auch in jedem Schritt beliebig anders verändern. Z.B. zufällig:

size(400, 200);
background(255);

for (int i=0; i < 400; i = i+int(random(40))) {
  line(5+i,5,5+i,195);
}

Verschachtelte Wiederholung

Schleifen können in Schleifen stehen. Z.B. um mehrere Zeilen mit jeweils mehreren Elementen zeichnen zu können.

Eine Zeile:

size(200,200);
background(255);
noStroke();
fill(0);
rectMode(CENTER);

for (int i=0; i<10; i++) {
  rect(10+i*20,10,8,8); 
}

Eine Spalte:

size(200,200);
background(255);
noStroke();
fill(0);
rectMode(CENTER);

for (int j=0; j<10; j++) {
  rect(10,10+j*20,8,8); 
}

Zeilen und Spalten...

size(200,200);
background(255);
noStroke();
fill(0);
rectMode(CENTER);

for (int i=0; i<10; i++) {
  for (int j=0; j<10; j++) {
    fill(i/10.0*255,0,j/10.0*255);
    rect(10+i*20,10+j*20,8,8); 
  }
}

...mit zusätzlicher Variable.

size(200,200);
background(255);
noStroke();
fill(0);
rectMode(CENTER);

for (int i=0; i<10; i++) {
  for (int j=0; j<10; j++) {
    fill(i/10.0*255,0,j/10.0*255);
    float groesse = random(1,9);
    rect(10+i*20,10+j*20,groesse,groesse); 
  }
}