4.10.6 Das Chaosspiel |
|
if - if - if | Wir
machen ein neues Spiel. Seine Regeln heißen. Markiere die Eckpunkte eines gleichseitigen
Am besten führe man den Algorithmus
zunächst einmal auf dem Papier aus, bevor wir ihn in Java implementieren. |
Download: ChaosSpiel.java |
import turtle.*; import java.awt.*; /** * Turtle-Projekt: ChaosSpiel.java * @version 1.1 vom 22.11.2004 * @author Michael Pohlig */ public class ChaosSpiel extends TurtleFrame { //t1 wird deklariert Turtle t1; // Festlegung der Koordinaten für das gleichseitige Dreieck double xA = -150, yA = -100, xB = 150, yB = -100, xC = 0, yC = 150*Math.sqrt(3)-100; //Die Start-Position der Turtle wird per Zufall gesetzt. double xStart = Math.random()*400-200; double yStart = Math.random()*400-200; //In Zufall wird das Ergebnis des Würfelns gespeichert int zufall; //In schritt wird die Schrittlänge der Turtle gespeichert double schritt; public ChaosSpiel(String title) { super(title); //t1 wird erzeugt t1 = new Turtle(tWin); //t1 erhält die Farbe rot t1.setColor(Color.RED); //t1 markiert die drei Eckpunkte des Dreiecks t1.writeTo(".",xA,yA); t1.writeTo(".",xB,yB); t1.writeTo(".",xC,yC); //Die Farbe für t1 wird auf schwarz zurückgesetzte t1.setColor(Color.BLACK); //Die Turtle nimmt die Startposition ein t1.jumpTo(xStart,yStart); } public void zeichne() { for(int i =0; i <100; i++){ //es wird ein Dreieckspunkt 'gewürfelt' zufall = (int)(3*Math.random())+1; if (zufall==1) { //Der Abstand der Turtle zu dem gewürfelten //Punkt wird berechnet und in der Variablen schritt //gespeichert schritt = Math.sqrt(Math.pow(xA-t1.getX(),2) +Math.pow(yA-t1.getY(),2)); //t1 richtet sich in Richtung gefürfelten Eckpunkt aus t1.turnTo(xA,yA); //t1 nimmt den Zeichenstift hoch t1.up(); //t1 bewegt sich auf Eckpunkt (halbe Entfernung) zu //ohne zu zeichnen t1.forward(0.5*schritt); //t1 setzt den Zeichnstift wieder ab t1.down(); //t1 markiert seine aktuelle Position mit einen //kleinen Kreis. t1.writeTo(".",t1.getX(),t1.getY()); } if (zufall==2) { schritt = Math.sqrt(Math.pow(xB-t1.getX(),2) +Math.pow(yB-t1.getY(),2)); t1.turnTo(xB,yB); t1.up(); t1.forward(0.5*schritt); t1.down(); t1.writeTo(".",t1.getX(),t1.getY()); } if (zufall==3) { schritt = Math.sqrt(Math.pow(xC-t1.getX(),2) +Math.pow(yC-t1.getY(),2)); t1.turnTo(xC,yC); t1.up(); t1.forward(0.5*schritt); t1.down(); t1.writeTo(".",t1.getX(),t1.getY()); } } } public static void main (String[] args) { new ChaosSpiel("ChaosSpiel"); } } |
Zeilenkommentare erläutern die einzelnen Anweisungen. Wir erkennen, dass
Java es erlaubt, auf die
else-Anweisung
zu verzichten, dann nämlich, wenn in ihrem Block nichts stehen würde.
In der zweiten und dritten
if-Anweisung
wurde auf die Kommentierung verzichtet, da die Anweisungen in allen drei
Blöcken sich nur in dem Namen des anvisierten Punktes unterscheiden.
Um vom Bediener des Programmes nicht
zu verlangen, dass er tausendfach den zeichne!-Schalter drückt, ist im
Programm zusätzlich eine
for-Schleife
eingebaut, die pro Klick auf den zeichne!-Schalter die Turtle veranlasst
100 Punkte zu setzen. |
|
|
|
zu | 4.10.7 switch - Konstruktion |
zur Startseite | www.pohlig.de (C) MPohlig 2004 |