Zum Hauptinhalt springen

Aufgabe 3

Schwierigkeitsgrad: Mittel
Themen: Arrays Kontrollstrukturen optional Zeiger und Funktionen

Conways Spiel des Lebens (Wikipedia) ist ein zellulärer Automat, der vom Mathematiker John Horton Conway entwickelt wurde. Es besteht aus einem Gitter von Zellen, die je nach bestimmten Regeln leben, sterben oder neu entstehen. Durch einfache Anfangszustände können dabei komplexe und überraschende Muster im Laufe der Zeit entstehen. Die Zellen entstehen und sterben dabei jede Runde nach folgenden Regeln:

  1. jede lebendige Zelle mit weniger als zwei lebenden Nachbarn stirbt aufgrund von Unterbevölkerung 2.jede lebendige Zelle mit zwei oder drei lebenden Nachbarn lebt bleibt am Leben
  2. jede lebendige Zelle mit mehr als drei lebenden Nachbarn stirbt aufgrund von Überbevölkerung
  3. jede tote Zelle mit genau drei lebenden Nachbar wird wieder lebendig
info

Hinweise: Als Nachbarn gelten alle 8 Zellen im direkten Umfeld eine Zelle. Das Spiel geht mehrere Runden. Jede Runde werden erst die Nachbarn aller Zellen gezählt, bevor das Spielfeld aktualisiert wird.

Implementieren Sie das Spiel. Nutzen Sie für des Spielfeld ein zweidimensionales Array und definieren Sie dessen Höhe und Breite mittel #define NAME value. Nutzen Sie folgende Funktion zu Visualisierung des Rasters im Terminal:

#include <iostream>
#include <thread>
#include <chrono>

#define HEIGHT 20
#define WIDTH 20

void printMatrix(const int grid[HEIGHT][WIDTH])
{
std::cout << "\033[H"; // Move cursor to top-left before printing (ANSI escape code)
for (int i = 0; i < HEIGHT; ++i)
{
for (int j = 0; j < WIDTH; ++j)
{
if (grid[i][j] == 1)
std::cout << "\033[47m" << " "; // White Cell
else
std::cout << "\033[40m" << " "; // Black Cell
}
std::cout << "\033[0m" << std::endl; // reset colors
}
std::this_thread::sleep_for(std::chrono::milliseconds(500)); // Add a delay to slow down printing
}

Testen Sie das Spiel zum Beispiel mit folgender Anfangskonfiguration:

int grid[HEIGHT][WIDTH] = {};
grid[11][10] = 1;
grid[10][10] = 1;
grid[9][10] = 1;
grid[10][9] = 1;
grid[11][11] = 1;