Spielprogrammierung mit Java
HomeAufgabenDruckenJava-Online

Langton Ameisen-Simulation


Christopher Langton ist ein Mitbegründer der Forschungsdisziplin "Artifical Live", die sich mit der Simulation von Lebewesen befasst. Seine Ameisen-Simulation ist ein Beispiel dafür, dass ein chaotisches System zu einer geordneten Struktur führen kann.

Das System verhält sich nach folgendem Algorithmus:
Eine Ameise befindet sich auf einem weissen Raster. Ihre Bewegungsrichtung ist gegen Norden. In jedem Simulationsschritt bewegt sie sich um ein Feld in ihre derzeitige Bewegungsrichtung. Dazu gelten folgende Regeln:

  • Ist das Feld weiss, so färbt sie es schwarz und dreht sich um 90 Grad nach rechts
  • Ist das Feld schwarz, so färbt sie es weiss und dreht sich um 90 Grad nach links

Schon nach kurzer Zeit bildet sich ein unerwartetes Muster.

 

 

Programmcode:

// Langton.java

import ch.aplu.jgamegrid.*;
import java.awt.Color;

public class Langton extends GameGrid
{
  private final Actor ant = new Actor(true"sprites/ant.gif");
  private final String title = "JGameGrid - Langton's Ant. # Steps: ";

  public Langton()
  {
    super(1001006new Color(240240240)true);
    setSimulationPeriod(10);
    setBgColor(Color.white);
    addActor(ant, new Location(5050)-90);
    reset();
    show();
  }
  
  public void reset()
  {
    getBg().clear();
    setTitle(title + getNbCycles());
  }

  public void act()
  {
    setTitle(title + (getNbCycles() + 1));
    Location loc = ant.getLocation();
    GGBackground bg = getBg();
    Color c = bg.getColor(loc);
    if (c.equals(Color.white))
    {
      bg.fillCell(loc, Color.black, false);
      ant.setDirection(ant.getDirection() + 90);
    }
    else
    {
      bg.fillCell(loc, Color.white, false);
      ant.setDirection(ant.getDirection() - 90);
    }
    ant.move(1);
    if (ant.isNearBorder())
      doPause();
  }

  public static void main(String[] args)
  {
    new Langton();
  }
}