Pflichtenheft
1. Vorüberlegungen/Grobstrukturierung (Pflichtenheft)
Die vorliegende Schrift beinhaltet eine Arbeit zum Thema "Celluläre Automaten". Die Gruppe, bestehend aus Holger Degenhardt und Felix Klüter, hat es sich zur Aufgabe gemacht, das unter Informatikern weit verbreitete "Spiel" namens "Game of Life" nachzuprogrammieren, beziehungsweise dessen Regeln dahingehend zu verändern und die Funktionsweise nachzuvollziehen, sodass sich nicht nur eine einzige Population von Organismen ausbreiten kann, sondern möglicherweise zwei oder mehrere unterschiedliche Populationen existieren können, welche sich gegenseitig beeinflussen. Zunächst sei die grundsätzliche Idee des Game of Life näher erläutert. Bei diesem Spiel geht es darum, dass auf einem vorgegebenen "Spielfeld" als Ausgangssituation eine gewisse Anzahl an "einzelligen" Organismen existiert. Diese Population entwickelt sich nun im Laufe des Spiels eigenständig, anhand der zuvor definierten Regeln, weiter. Dabei lassen sich erstaunliche Erkenntnisse über gewisse Verhaltensweisen von Ausgangspopulationen gewinnen (was die Positionierung bzw. Formierung auf dem Spielfeld betrifft). Daraus resultiert, dass es gewisse Formierungen gibt, welche niemals aussterben, weil sie sich gegenseitig, natürlich aufgrund der vorher definierten Regeln, stabilisieren. Es sei also als ein weiteres Ziel dieser Arbeit gesetzt, die Zusammenhänge zwischen Regeln und Anfangspopulationen bzw. Ausgangssituationen zu erforschen.
1.1 Grundidee unserer Umsetzung
Zu erstellen sei ein zweidimensionales Spielfeld, auf welchem sich als Ausgangssituation zwei unterschiedliche Populationen gegenüberstehen. Dieses Spielfeld sei jedoch eher als "Kugeloberfläche" aufzufassen, d.h. die Ränder des Spielfeldes sind miteinander verbunden bzw. beeinflussen sich gegenseitig (als wären sie direkte Nachbarn zueinander). Die gegenseitige Beeinflussung der beiden Populationen sei abhängig von den vorher definierten Regeln. Das Programm sei nun insoweit fähig, das Spielfeld nach den definierten Regeln zu bearbeiten und die Entwicklung der Populationen darzustellen.
1.2 Mögliche Erweiterungen
Um der Flut von Ideen, die ein solches Spiel mit sich bringt, auch Rechnung zu tragen, seien die möglichen Spielerweiterungen, welche als Zusatz teilweise implementiert werden könnten, aufgelistet:
- Verschiedene Einflussbereiche der Einzeller (Regeln)
- Verschiedene Regelbereiche
- Verschiedene Regelbereiche im Zusammenhang mit graphischer Darstellung und Interpretation (Land, Wasser, Schnee,...)
- Verschiedene Interaktionen der Einzeller (Regeln)
- Eine Fuchs und Hase Simulation
1.3 Benutzeroberfläche
Die Benutzeroberfläche des Programms soll dem Benutzer, neben den üblichen Datei-Menü-Anweisungen (Datei: Starten, Stoppen, Beenden; Hilfe: Hilfe, About), das Spielfeld anzeigen. Darüber hinaus sollen sich folgende Elemente auf der Oberfläche: Start/Stopp (Button), Geschwindigkeit (Button?) befinden.
1.4 Datentypen, -verarbeitung, -speicherung
Zunächst ist zu bemerken, dass die Datenverarbeitung und die Darstellung des Feldes voneinander getrennt werden, d.h. die Berechnung des momentanen Populationsstandes erfolgt mit Hilfe zweier Arrays, welche über eine x und y Achse verfügen. Daran schließt sich eine getrennte Prozedur zur Zeichnung des Spielfeldes an, welches das momentan überprüfte Kästchen auf dem Image einzeichnet. Jeder Spielzug wird einzeln getimt, sprich ein Timer sorgt dafür, dass in einem bestimmten Intervall die Überprüfung vollzogen wird. Das soll zunächst nach den Vorgaben des Geschwindigkeitsreglers auf der Benutzeroberfläche geschehen. Natürlich ist die Geschwindigkeit des Programms jedoch auch davon abhängig, wie schnell der Computer die Überprüfung vornehmen kann; das sei jedoch zu diesem Zeitpunkt noch außen vor gelassen, da noch nicht abzusehen ist, wie schnell und effektiv das Programm wirklich arbeitet. Es ist geplant, das Programm mit folgenden Prozeduren zu verwirklichen:
- FormCreate: Erzeugt wird ein Image, welches aus einer konstant festgelegten Anzahl von Kästchen in x und y Richtung die Größe zugewiesen bekommt; dabei wird der Array in x und y Richtung mit 0 beschrieben, um festzustellen, dass dort keine Population ist, und danach das Spielfeld zum ersten mal gezeichnet.
- MouseDown: Diese Prozedur sorgt dafür, dass die aus dem Image.MouseDown Event übergebenen Koordinaten (x,y) des Arrays, welche aus der Mausposition errechnet werden, richtig in den Array eingetragen werden und daraufhin das Kästchen mit der Prozedur ArrayOut eingefärbt wird.
- ArrayOut: Diese Prozedur bekommt beim Aufruf eine x,y - Koordinate des Arrays übergeben, liest diese aus und färbt das richtige Kästchen ein.
- Read: Diese Funktion stellt anhand der übergebenen x,y - Koordinate des Arrays fest, wie viele unbevölkerte Kästchen bzw. wie viele Kästchen welcher Population sich im Einzugsbereich des zu überprüfenden Kästchens befinden und summiert diese auf. Danach werden die Werte für die verschiedenen Populationen bzw. für keine Population zurückgegeben: (x,y) -> (a[1],a[2])
- Rule: Diese Funktion stellt anhand der übergebenen Anzahl von Populationen im Einzugsbereich des Kästchens fest, welchen neuen Wert das Kästchen annehmen soll:(a[1],a[2]) -> (Wert).
- Test: Diese Prozedur übernimmt den Durchgang jeder (x,y) Koordinate des übergebenen Feldes und deren Überprüfung, indem folgende Befehle ausgeführt werden:
For x := 0 to const do begin
Diese Prozedur stellt die zentrale Prozedur des Programms dar und wird vom Timer mit dem OnTimerTime Event aufgerufen.
For y := 0 to const do begin
Read(x,y,feld);
Rule(a[0],a[1],a[2]);
ArrayOut(x,y,wert,feld);
End;
End;
1.5 Regeln/Geltungsbereiche
Um das Programm zunächst so einfach als möglich zu halten, werden die Regeln dem Fuchs - Hase Problem angepasst: Der Fuchs kann nur mit dem Hasen überleben, wenn er Hasen zum Fressen hat und sich dann fortpflanzt, wenn er mehr als ein Fuchs ist. Der Hase kann sich nur fortpflanzen, wenn er mindestens zu zweit ist.