Die so genannte Langton-Ameise ist nach ihrem Entdecker, Chris Langton benannt. Sie stellt eine Turing-Maschine dar. Dabei wird allgemein ein Lesekopf über eine Datei gesteuert: Steht der Lesekopf still, so liest er aus der Datei den nächsten Steuerbefehl, den er sogleich ausführt...
Die Langton-Ameise bewegt sich als Turing-Maschine über eine Fläche, die aus lauter Quadraten besteht. Ausgehend von der Mitte bewegt sie sich nach folgendem Schema: Kommt sie auf ein weißes Feld zu stehen, so wendet sie sich um 90° nach rechts, färbt das Quadrat ein und wandert um ein Feld weiter. Ist dieses bereits eingefärbt, so färbt sie es wieder weiß, dreht sich um 90° nach links und wandert wieder ein Feld weiter. Durch diesen Algorithmus scheint die Ameise nun in einem heillosen Durcheinander über das Zeichenfeld zu wuseln - tatsächlich wird die Bewegung aber nach einer endlichen Zahl von Schritten regelmäßig:
Der Programmcode ist überraschend kurz:
import java.awt.*; import java.awt.event.*; public class Langton extends Frame { Langton() { super("Die Langton-Ameise ;-)"); } public static void main (String[] arguments) { Langton proggi = new Langton(); WindowListener wl = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; proggi.addWindowListener(wl); proggi.setSize(500,500); proggi.show(); } public void paint(Graphics bs) { int x; int y; int i; int j; int richtung; int[][] Welt = new int [100][100]; for (i=0;i<100;i++) for (j=0;j<100;j++) Welt[i][j]=0; bs.setColor(Color.white); bs.fillRect(50,50,400,400); richtung = 1; x = 50; y = 50; x++; do { if (Welt[x][y]==1) { richtung = ((richtung - 1) % 4); Welt[x][y]=0; bs.setColor(Color.white); bs.fillRect(4*x+50,4*y+50,4,4); } else { richtung = ((richtung + 1) % 4); Welt[x][y]=1; bs.setColor(Color.black); bs.fillRect(4*x+50,4*y+50,4,4); } if (richtung == 0) { richtung=4; y--; } else if (richtung == 1) x++; else if (richtung == 2) y++; else if (richtung == 3) x--; } while ((x>=1) && (x<=100) && (y>=1) && (y<=100)); } }
Die jeweilige Richtung, nach der sich die Ameise weiter bewegen soll, wird durch die Zahlen 0, 1, 2, und 3 beschrieben. Davon abhängig werden die Koordinaten x und y inkrementiert oder dekrementiert. Die Ausgabe bricht ab, wenn der Zeichenbereich verlassen wird.