next up previous contents
Nächste Seite: Zelluläre Automaten Aufwärts: Grafik Vorherige Seite: Turmiten   Inhalt

Regelketten für Turmiten abändern

In diesem Beispiel kann eine Regelkette aus 16 Zeichen für die Ausgabe einer Turmitenbahn mit 16 verschiedenen Farben eingegeben werden:

import java.awt.*;
import java.awt.event.*;

public class Turmiten extends Frame implements ActionListener {

    int regel[] = new int [16];
    Button ok;
    TextField eingabe;

    Turmiten() {
        super("Turmiten gibt es in jedem PC ;-)");
        setLayout(new FlowLayout());
        Label was = new Label("Regelkette, 16 Ziffern 0-1: ");
        add(was);
        eingabe = new TextField("1001100110011001",16);
        add(eingabe);
        ok = new Button("ok");
        add(ok);
        ok.addActionListener(this);
        werteuebernehmen();
    }

    public static void main (String[] arguments) {
        Turmiten proggi = new Turmiten();
        WindowListener wl = new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        };
        proggi.addWindowListener(wl);
        proggi.setLocation(100,100);
        proggi.setSize(500,570);
        proggi.show();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == ok) {
            werteuebernehmen();
            repaint();
        }
    }

    public void werteuebernehmen() {
        int el;
        String eintrag = eingabe.getText();
        el = eintrag.length();
        if (el > 16) el = 16;
        for (int i=0; i<el;i++) {
            if (eintrag.charAt(i) == '0') regel[i]=-1;
            if (eintrag.charAt(i) == '1') regel[i]=1;
        }
    }



    public void paint(Graphics bs) {
        int x;
        int y;
        int i;
        int j;
        int zaehler;

        int richtung;

        int[][] Welt = new int [100][100];

        Color lblue = new Color(128,128,255);
        Color dblue = new Color(0,0,192);
        Color dyellow = new Color(192,192,0);
        Color lred = new Color(255,128,128);
        Color dred = new Color(192,0,0);
        Color dgreen = new Color(0,192,0);

        for (i=0;i<100;i++) 
            for (j=0;j<100;j++)
                Welt[i][j]=0;

        bs.setColor(Color.white);
        bs.fillRect(0,70,500,500);
  
        richtung = 1;
        x = 50;
        y = 50;
        x++;
        zaehler = 0;
        do {
            if (Welt[x][y]==0) {
                richtung = ((richtung + regel[0]) % 4);
                Welt[x][y]=1;
                bs.setColor(Color.red);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==1) {
                richtung = ((richtung + regel[1]) % 4);
                Welt[x][y]=2;
                bs.setColor(Color.green);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==2) {
                richtung = ((richtung + regel[2]) % 4);
                Welt[x][y]=3;
                bs.setColor(Color.green);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==3) {
                richtung = ((richtung + regel[3]) % 4);
                Welt[x][y]=4;
                bs.setColor(Color.yellow);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==4) {
                richtung = ((richtung + regel[4]) % 4);
                Welt[x][y]=5;
                bs.setColor(Color.gray);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==5) {
                richtung = ((richtung + regel[5]) % 4);
                Welt[x][y]=6;
                bs.setColor(Color.magenta);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==6) {
                richtung = ((richtung + regel[6]) % 4);
                Welt[x][y]=7;
                bs.setColor(Color.orange);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==7) {
                richtung = ((richtung + regel[7]) % 4);
                Welt[x][y]=8;
                bs.setColor(Color.cyan);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==8) {
                richtung = ((richtung + regel[8]) % 4);
                Welt[x][y]=9;
                bs.setColor(Color.pink);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==9) {
                richtung = ((richtung + regel[9]) % 4);
                Welt[x][y]=10;
                bs.setColor(dred);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==10) {
                richtung = ((richtung + regel[10]) % 4);
                Welt[x][y]=11;
                bs.setColor(dgreen);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==11) {
                richtung = ((richtung + regel[11]) % 4);
                Welt[x][y]=12;
                bs.setColor(dblue);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==12) {
                richtung = ((richtung + regel[12]) % 4);
                Welt[x][y]=13;
                bs.setColor(dyellow);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==13) {
                richtung = ((richtung + regel[13]) % 4);
                Welt[x][y]=14;
                bs.setColor(lred);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==14) {
                richtung = ((richtung + regel[14]) % 4);
                Welt[x][y]=15;
                bs.setColor(lblue);
                bs.fillRect(5*x,5*y+70,5,5);
            } else if (Welt[x][y]==15) {
                richtung = ((richtung + regel[15]) % 4);
                Welt[x][y]=0;
                bs.setColor(Color.white);
                bs.fillRect(5*x,5*y+70,5,5);
            }
            if (richtung == 0) {
                richtung=4;
                y--;
            } else if (richtung == 1) 
                x++;
            else if (richtung == 2)
                y++;
            else if (richtung == 3)
                x--;
            zaehler++;
        } while (((zaehler<100000) || (x!=50) || (y!=50)) && 
            ((x>0) && (x<100) && (y>0) && (y<100))); 
    }
}

Beachte, wie eigene Farben definiert werden!


\includegraphics[width=7cm]{Turmiten.ps}



Alfred Nussbaumer 2003-02-10