← Blog

Conways Spiel des Lebens

Conways Spiel des Lebens ist ein klassisches Beispiel dafuer, wie Komplexitaet aus wenigen einfachen Regeln entstehen kann. Stellen Sie sich ein unendliches Gitter von Zellen vor - jede kann 'ein' (lebendig) oder 'aus' (tot) sein. In jeder Runde (oder 'Generation') prueft jede Zelle, wie viele Nachbarn leben. Bei Ueberbeveolkerung stirbt sie. Bei zu wenigen Nachbarn stirbt sie ebenfalls. Aber bei genau drei Nachbarn erwacht eine tote Zelle zum Leben.

Dieses einfache Regelwerk fuehrt zu endlos faszinierendem Verhalten - von stabilen Formationen und wiederkehrenden Oszillatoren bis hin zu selbstfortbewegenden 'Raumschiffen', die das Gitter durchqueren. Es ist eine perfekte Demonstration dafuer, wie Komplexitaet aus Einfachheit entstehen kann, und es ist sogar Turing-vollstaendig, kann also theoretisch jede Berechnung simulieren.

Wie es funktioniert

Spielbrett wird geladen...

Musterbeispiele

Diese klassischen Muster zeigen das emergente Verhalten des Spiels. Der 'Glider' demonstriert Bewegung ueber das Gitter, der 'Pulsar' erzeugt eine faszinierende Oszillation, und der 'Small Exploder' zeigt, wie einfache Formen sich zu komplexen entwickeln koennen.

Der Algorithmus

Im Kern besteht das Spiel des Lebens aus wenigen eleganten Funktionen, die ueber Leben und Tod in unserem zellulaeren Universum entscheiden:

// The core algorithm that determines life and death
function computeNextGeneration(currentGrid) {
  const newGrid = createEmptyGrid(rows, cols);

  for (let r = 0; r < rows; r++) {
    for (let c = 0; c < cols; c++) {
      const neighbors = countNeighbors(currentGrid, r, c);
      const cellState = currentGrid[r][c];

      // Apply Conway's rules of life
      if (cellState === 1) {
        // Live cell survives if it has 2 or 3 neighbors
        newGrid[r][c] = (neighbors === 2 || neighbors === 3) ? 1 : 0;
      } else {
        // Dead cell springs to life if it has exactly 3 neighbors
        newGrid[r][c] = (neighbors === 3) ? 1 : 0;
      }
    }
  }
  return newGrid;
}
Der Kernalgorithmus wendet Conways Regeln auf jede Zelle im Gitter an. In jeder Generation ueberprueft er den Zustand jeder Zelle und ihre Nachbarzahl, um zu bestimmen, ob sie lebt, stirbt oder zum Leben erwacht.
// Count live neighbors for each cell
function countNeighbors(g, row, col) {
  let count = 0;
  for (let i = 0; i < 8; i++) {
    const nr = row + NEIGHBOR_OFFSETS[i * 2];
    const nc = col + NEIGHBOR_OFFSETS[i * 2 + 1];
    if (nr >= 0 && nr < rows && nc >= 0 && nc < cols) {
      count += g[nr][nc];
    }
  }
  return count;
}
Wolframs Regel 110 ansehen →
Wie es funktioniert

Wählen Sie einen beliebigen Bereich, um Zellcluster zu erstellen, oder wählen und ziehen Sie, um lebende Pfade zu zeichnen. Drücken Sie Abspielen, um Ihre Kreation zu beobachten, oder verwenden Sie Schritt Vorwärts, um eine Generation nach der anderen voranzuschreiten. Verwenden Sie Zufällig für Chaos oder Löschen für einen Neuanfang.

Die Regeln

Jede Zelle folgt in jeder Generation vier einfachen Regeln:

  • Unterbevölkerung: Eine lebende Zelle mit weniger als 2 Nachbarn stirbt
  • Überleben: Eine lebende Zelle mit 2 oder 3 Nachbarn überlebt
  • Überbevölkerung: Eine lebende Zelle mit mehr als 3 Nachbarn stirbt
  • Fortpflanzung: Eine tote Zelle mit genau 3 Nachbarn wird lebendig
Steuerung
  • Abspielen/Pause: Simulation starten oder stoppen
  • Schritt vorwärts: Eine Generation nach der anderen voranschreiten
  • Geschwindigkeit: Einstellen, wie schnell die Generationen vergehen
  • Zoom: Rastergröße ändern (nur bei Pause)
Musterbeispiele

Probieren Sie die voreingestellten Muster aus, um verschiedene Verhaltensweisen zu sehen:

  • Gleiter: Ein Muster, das sich diagonal über das Raster bewegt
  • Pulsar: Ein großes Muster, das mit einer Periode von 3 Generationen oszilliert
  • Kleiner Exploder: Ein Muster, das sich chaotisch nach außen ausdehnt