Hallo,

endlich weißt du was Variablen sind (Behälter, in denen beliebig Werte abgelegt oder herausgenommen werden können), und damit bist du schon ein ganzes Stück weiter. Heute möchte Ich dir zeigen, wie man mit Fallbedingungen arbeitet. Aber .. Was sind Fallbedingungen?

<h3>Fallbedingungen</h3>

Mit sog. Fallbedingungen kannst du den Programmablauf ändern, das heißt bei bestimmten eintretenden oder nicht eintretenden Ereignissen, passiert dies und das. Beispiel: Wenn die X-Mausposition kleiner oder gleich 100, mache schwarzen Hintergrund, ansonsten mache weißen Hintergrund. So in etwa. Es ist immer dieses Wenn ... Dann ... Und wie das ganze Programmiertechnisch aussieht, dazu kommen wir jetzt. "Wenn" übersetzt ins Englische bedeutet "if". Da das eine Befehlsanweisung ist, musst du hier wieder Anfang und Ende des Anweisungsblock durch geschweifte Klammern definieren. Wir fragen im Code etwa so ab:

WENN(Dies passiert) { //Dann führe diesen Code aus }

also quasi:

if(Bedingung erfüllt) { //Führe diesen Code aus }

Im letzten Artikel hab' Ich dir zudem Vergleichsoperatoren gezeigt, wie schon angesprochen, kommen die bei den Fallbedingungen zum Einsatz. Doch halt, natürlich können wir mit so einem Wenn-Dann nicht nur Zahlen und Rechnungen abfragen. Was so eine Anweisung wirklich erwartet, ist der boolesche Wert true. Ein boolscher Wert kann genau 2 Zustände annehmen, nämlich true oder false, also Wahr oder Falsch. Dafürt gibt es den Datentyp boolean(ausgesprochen etwa "buhlien"). Beispiel: 5 kleiner 7 -> trifft zu, 5 ist in der Tat kleiner als 7, der Vergleich ergibt also true. So ist es immer und überall, und das nicht nur bei Rechenoperationen, sondern zum Beispiel auch beim Vergleich zweier Texte oder sonst etwas. Aber sehen wir uns doch jetzt endlich mal den Code an für ein einfaches Beispiel, nämlich das von vorhin. Ich möchte folgendes: Wenn die X-Position der Maus größer oder gleich der Hälfte der Breite des Fensters entspricht, möchte Ich einen weißen Hintergrund, andernfalls einen schwarzen Hintergrund. Wo schreiben wir den Code? Hierbei ist eigentilch egal, ob wir ihn in draw() setzen oder ins mouseMoved()-Event, denn draw() wird ständig ausgeführt, mouseMoved() immer dann, sobald(solang) die Maus bewegt wird. Aber schau es dir an:

<div id="id_lightbox">
    <div id="id_box_header">
        <span id="id_box_title">Sourcecode</span>
    </div>
    <div id="id_box_main">

<pre> <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>setup</b></span>() { <span style="color: #CC6600;">size</span>(300, 300); <span style="color: #CC6600;">smooth</span>(); <span style="color: #CC6600;">background</span>(255); } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>draw</b></span>() { } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;">mouseMoved</span>() { <span style="color: #CC6600;">background</span>(255); <span style="color: #CC6600;">if</span>(<span style="color: #006699;">mouseX</span> >= <span style="color: #006699;">width</span> / 2) { <span style="color: #CC6600;">background</span>(0); } } </pre>

    </div></div>

Gar nicht schwer, oder? Du siehst, die Hintergrundfarbe wird, egal wo die Maus ist, am Anfang immer auf Weiß gesetzt. Ist die Maus über der Hälfte der Breite des Fensters, wird der Hintergrund nachträglich auf Schwarz gesetzt. Es ist einfach, du schreibst die Abfrage(if), stellst die Bedingung (in Klammern, bei unserem Beispiel wird abgefragt ob mouseX >= Hälfte der Breite des Fensters) und führst bei true den Code aus. Ah, da hab' Ich was für dich, um dir das mit der Bedingung klar zu machen, sieh mal:

<div id="id_lightbox">
    <div id="id_box_header">
        <span id="id_box_title">Sourcecode</span>
    </div>
    <div id="id_box_main">

<pre> <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>setup</b></span>() { <span style="color: #CC6600;">size</span>(300, 300); <span style="color: #CC6600;">smooth</span>(); <span style="color: #CC6600;">background</span>(255); } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>draw</b></span>() { } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;">mouseMoved</span>() { <span style="color: #CC6600;">background</span>(255); <span style="color: #CC6600;">if</span>(<span style="color: #006699;">mouseX</span> >= <span style="color: #006699;">width</span> / 2) { <span style="color: #CC6600;">background</span>(0); } <span style="color: #CC6600;">println</span>(<span style="color: #006699;">mouseX</span> >= <span style="color: #006699;">width</span> / 2); } </pre>

    </div></div>

Fällt dir was auf? Schau unten in der IDE im schwarzen Fenster nach ;-) Du weißt nun, ist eine Bedingung erfüllt, wird Code ausgeführt. Doch was, wenn die Bedingung false ergibt? Dafür gibt es auch was: WENN [...] DANN [...] ANDERNFALLS [...]. Ins englische übersetzt als else. Wenn Taste Q gedrückt wird, schreibe einen Text, wenn nicht, schreibe anderen Text. Beispiel:

<div id="id_lightbox">
    <div id="id_box_header">
        <span id="id_box_title">Sourcecode</span>
    </div>
    <div id="id_box_main">

<pre> <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>setup</b></span>() { <span style="color: #CC6600;">size</span>(300, 300); <span style="color: #CC6600;">smooth</span>(); <span style="color: #CC6600;">background</span>(255); } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>draw</b></span>() { } <span style="color: #CC6600;">void</span> <span style="color: #006699;">keyPressed</span>() { <span style="color: #CC6600;">background</span>(255); <span style="color: #CC6600;">fill</span>(0); <span style="color: #CC6600;">if</span>(<span style="color: #006699;">key</span> == <span style="color: #006699;">'q'</span>) { <span style="color: #CC6600;">text</span>(<span style="color: #006699;">"Juhu, Q wurde gedrückt"</span>, 100, 100); } <span style="color: #CC6600;">else</span> { <span style="color: #CC6600;">text</span>(<span style="color: #006699;">"Es wurde nicht "</span> + <span style="color: #006699;">key</span> + <span style="color: #006699;">" gedrückt"</span>, 100, 100); } } </pre>

    </div></div>

Soweit nicht soo schwer, oder? Und wenn wir nun noch mit Variablen arbeiten, können wir auch schon ein paar tolle Ergebnisse erzielen. Stell dir vor du willst eine einfache Linie zeichnen, die sich vertikal von links nach rechts bewegt. Hat die Linie den Rand erreicht, soll sie wieder bei 0 starten:

<div id="id_lightbox">
    <div id="id_box_header">
        <span id="id_box_title">Sourcecode</span>
    </div>
    <div id="id_box_main">

<pre> <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>setup</b></span>() { <span style="color: #CC6600;">size</span>(300, 100); <span style="color: #CC6600;">smooth</span>(); <span style="color: #CC6600;">background</span>(255); <span style="color: #7E7E7E;">//Zu Anfangs den Wert von x setzen</span> x = 0; } <span style="color: #CC6600;">int</span> x; <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>draw</b></span>() { <span style="color: #7E7E7E;">//Hintergrund Weiß</span> <span style="color: #CC6600;">background</span>(255); <span style="color: #7E7E7E;">//Zeichenfarbe Schwarz</span> <span style="color: #CC6600;">stroke</span>(0, 230); <span style="color: #7E7E7E;">//Strichdicke 3Pixel</span> <span style="color: #CC6600;">strokeWeight</span>(3); <span style="color: #7E7E7E;">//Linie (in X-Richtung den Wert vin Variable X)</span> <span style="color: #CC6600;">line</span>(x, 0, x, <span style="color: #006699;">height</span>); <span style="color: #7E7E7E;">//X um +1 erhöhen</span> x++; <span style="color: #7E7E7E;">//Wenn x größer oder gleich Breite des Fensters,</span> <span style="color: #7E7E7E;">//setze x auf Null</span> <span style="color: #CC6600;">if</span>(x >= <span style="color: #006699;">width</span>){x = 0;} <span style="color: #7E7E7E;">//Füllen mit Schwarz (Rechteck)</span> <span style="color: #CC6600;">fill</span>(0); <span style="color: #7E7E7E;">//Rechteck zeichnen</span> <span style="color: #CC6600;">rect</span>(5, 0, 50, 12); <span style="color: #7E7E7E;">//Mit weiß füllen (für die Schrift)</span> <span style="color: #CC6600;">fill</span>(255); <span style="color: #7E7E7E;">//Text ausgeben (welchen Wert hat x)</span> <span style="color: #CC6600;">text</span>(<span style="color: #006699;">"x = "</span> + x, 10, 10); } </pre>

    </div></div>

Cool nicht wahr :-) Und damit nicht genug, denn es ist auch möglich, auf mehrere zu prüfen. Beispiel: WENN Mausposition X kleiner als 100 UND Mausposition Y kleiner als 100, mache Hintergrund auf Schwarz, ANDERNFALLS mache Hintergrund auf Weiß. Das Beispiel versuchen wir einmal, zuvor aber noch etwas zu ...

<h3>Logische Operatoren</h3>

Logische Operatoren wären UND, ODER und NICHT. Das Zeichen für UND ist hierbei &&. Das Zeichen für ODER ist ||. Um einen Ausdruck oder eine Bedingung zu negieren, setzt du einfach ein Ausrufezeichen (!) davor. Doch schau dir den Code an:

<div id="id_lightbox">
    <div id="id_box_header">
        <span id="id_box_title">Sourcecode</span>
    </div>
    <div id="id_box_main">

<pre> <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>setup</b></span>() { <span style="color: #CC6600;">size</span>(300, 300); <span style="color: #CC6600;">smooth</span>(); <span style="color: #CC6600;">background</span>(255); } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>draw</b></span>() { } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;">mouseMoved</span>() { <span style="color: #7E7E7E;">//Wenn MausX kleiner oder gleich 100 UND</span> <span style="color: #7E7E7E;">//MausY kleiner oder gleich 100, DANN ..</span> <span style="color: #CC6600;">if</span> (<span style="color: #006699;">mouseX</span> <= 100 && <span style="color: #006699;">mouseY</span> <= 100) { <span style="color: #CC6600;">background</span>(0); <span style="color: #CC6600;">fill</span>(255, 0, 0); } <span style="color: #CC6600;">else</span> { <span style="color: #CC6600;">background</span>(255); <span style="color: #CC6600;">noFill</span>(); } <span style="color: #7E7E7E;">//Damit man auch sieht, wo 100 und 100 ist,</span> <span style="color: #7E7E7E;">//zeiche Ich ein Rechteck:</span> <span style="color: #CC6600;">stroke</span>(0); <span style="color: #CC6600;">rect</span>(0, 0, 100, 100); } </pre>

    </div></div>

Gar nicht so schwer, stimmt's? Wollen wir uns zuletzt noch ein Praxisbeispiel ansehen. Danach zeige Ich dir noch Zufallszahlen. Aber nun zum praktischen Beispiel. Nehmen wir eine Ellipse. Wenn Taste "a" gedrückt wird, soll diese horizontal von links nach rechts fliegen, jeweils an den Wänden abprallen und zurückfliegen. Drückst du "+", bzw. "-" soll so die Geschwindigkeit reguliert werden. Drücke die Taste "0", um die "Kugel" an den Anfangspunkt zu setzen. Befindet sich die Maus im Bereich der Ellipse, kannst du die Kugel herumziehen, lässt du die Maus los, fliegt sie weiter. Aber schau selbst:

<div id="id_lightbox">
    <div id="id_box_header">
        <span id="id_box_title">Sourcecode</span>
    </div>
    <div id="id_box_main">

<pre> <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>setup</b></span>() { <span style="color: #CC6600;">size</span>(300, 300); <span style="color: #CC6600;">smooth</span>(); <span style="color: #CC6600;">background</span>(255); x = 50; y = <span style="color: #006699;">height</span> / 2; ballSize = 50; speed = 2.0; richtungX = 1; richtungY = 1; lock = <span style="color: #CC6600;">false</span>; drag = <span style="color: #CC6600;">false</span>; } <span style="color: #7E7E7E;">//X- und Y-Koordinaten des Balles und die Größes festlegen,</span> <span style="color: #7E7E7E;">//außerdem die Richtung in die er sich bewegt</span> <span style="color: #CC6600;">int</span> x, y, ballSize, richtungX, richtungY; <span style="color: #7E7E7E;">//Geschwindigkeit</span> <span style="color: #CC6600;">float</span> speed; <span style="color: #7E7E7E;">//Variablen um anzugeben, ob der Ball herumgezogen wird</span> <span style="color: #CC6600;">boolean</span> lock, drag; <span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>draw</b></span>() { <span style="color: #CC6600;">background</span>(255); <span style="color: #CC6600;">noStroke</span>(); <span style="color: #CC6600;">fill</span>(0); <span style="color: #7E7E7E;">//Ellipse wird gezeichnet</span> <span style="color: #CC6600;">ellipse</span>(x, y, ballSize, ballSize); <span style="color: #7E7E7E;">//wenn der Ball nicht gezogen wird, soll er</span> <span style="color: #7E7E7E;">//von allein weiterwandern</span> <span style="color: #CC6600;">if</span>(lock == <span style="color: #CC6600;">false</span>){x += speed * richtungX;} <span style="color: #7E7E7E;">//Wenn der Ball an der Wand abprallt, richtung ändern</span> <span style="color: #CC6600;">if</span>(x >= <span style="color: #006699;">width</span> - ballSize / 2 || x <= ballSize / 2) { <span style="color: #7E7E7E;">//Einfaches Prinzip wie damals in der Schule, </span> <span style="color: #7E7E7E;">//Zahl mal -1 ändert jeweils das Vorzeichen, also</span> <span style="color: #7E7E7E;">//aus Plus wird Minus, aus Minus wird Plus</span> richtungX *= -1; } } <span style="color: #CC6600;">void</span> <span style="color: #006699;">keyPressed</span>() { <span style="color: #7E7E7E;">//Wenn + gedrückt wird, erhöhe speed</span> <span style="color: #CC6600;">if</span>(<span style="color: #006699;">key</span> == <span style="color: #006699;">'+'</span> && speed <= 7.0) { speed += 0.5; } <span style="color: #CC6600;">if</span>(<span style="color: #006699;">key</span> == <span style="color: #006699;">'-'</span> && speed >= 0.5) { <span style="color: #7E7E7E;">//Wenn - gedrückt wird, verringere speed</span> speed -= 0.5; } <span style="color: #CC6600;">if</span>(<span style="color: #006699;">key</span> == <span style="color: #006699;">'0'</span>) { <span style="color: #7E7E7E;">//Wenn Null (0) gedrückt wird, setze Ellipse auf</span> <span style="color: #7E7E7E;">//Startposition zurück</span> x = 27; y = <span style="color: #006699;">height</span> / 2; } } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;">mouseDragged</span>() { <span style="color: #7E7E7E;">//Wenn sich Maus innerhalb des Balles befindet, dann...</span> <span style="color: #CC6600;">if</span>(<span style="color: #006699;">mouseX</span> <= x + ballSize / 2 && <span style="color: #006699;">mouseX</span> >= x - ballSize / 2 && <span style="color: #006699;">mouseY</span> >= y - ballSize / 2 && <span style="color: #006699;">mouseY</span> <= y + ballSize / 2) { <span style="color: #7E7E7E;">//.. setze Variable drag auf true.</span> drag = <span style="color: #CC6600;">true</span>; } <span style="color: #7E7E7E;">//Wenn drag true ergibt, dann..</span> <span style="color: #CC6600;">if</span>(drag) { <span style="color: #7E7E7E;">//..sperre automatische Bewegung der Kugel und..</span> lock = <span style="color: #CC6600;">true</span>; <span style="color: #7E7E7E;">//..setze Werte von x und y auf Mausposition</span> y = <span style="color: #006699;">mouseY</span>; x = <span style="color: #006699;">mouseX</span>; } } <span style="color: #CC6600;">void</span> <span style="color: #CC6600;">mouseReleased</span>() { <span style="color: #7E7E7E;">//Wird die Maus losgelassen, ist der verschiebevorgang beendet,</span> <span style="color: #7E7E7E;">//und die Kugel fliegt allein weiterhin von links nach rechts, </span> <span style="color: #7E7E7E;">//bzw von rechts nach links, je nachdem.</span> lock = <span style="color: #CC6600;">false</span>; drag = <span style="color: #CC6600;">false</span>; } </pre>