Lade Inhalt...

Programmierung Game of Life

Game of Life mit Delphi 5.0

Seminararbeit 2007 14 Seiten

Informatik - Programmierung

Leseprobe

Inhaltsverzeichnis

1. Programmidee

2. Lösungsvorschlag

3. Quelltextdokumentation

Anhang: Programmcode

1. Programmidee

Die Idee des "Game of Life" gibt es schon lange. Life wurde vom Mathematiker John Conway 1970 erfunden. Die Grundidee ist, dass jede Zelle acht Nachbarn hat, d.h. es liegt eine in viele kleine Quadrate eingeteilte Fläche vor. Folgende Regeln sind definiert, die festlegen, wann eine Zelle lebendig wird, lebendig bleibt und stirbt:

- Hat eine tote Zelle genau 3 lebendige Nachbarn, wird sie in der nächsten Generation lebendig, andernfalls bleibt sie tot.
- Hat eine lebendige Zelle genau 2 oder genau 3 lebendige Nachbarn, bleibt sie lebendig, andernfalls stirbt sie, also bei 0, 1, 4, 5, 6, 7 oder 8 Nachbarn.

Game of Life ist also kein Spiel im herkömmlichen Sinn. Es gibt keine Spieler und somit keine Gewinner oder Verlierer. Lediglich eine Startsituation ist nötig, den Rest gestalten die Spielregeln.

2. Lösungsvorschlag

In einem Array (Spielfeld[x,y]) kann man jede Zelle als lebendig oder tot abspeichern, wobei man als tot den Wert „0“ und als lebendig den Wert „1“ definiert. Damit die nächste Generation angeschaut werden kann, ruft das Programm „Update Spielfeld“ auf. Daraufhin wird auf jede Zelle der „UpdateZelle“ - Algorithmus angewendet, dafür wird zuerst jede Zelle auf ihre toten und lebendigen Nachbarn überprüft, dies geschieht in der Funktion „ZaehleNachbarn“. In „UpdateZelle“ wird entschieden, ob eine Zelle in der nächsten Generation noch lebendig ist oder sterben wird. Der neue Zustand der Zelle x,y wird berechnet, das Spielfeld[x,y] wird über die Routinen "FuegeLWein" und "EntferneLW" aktualisiert. Jede Generation wird grafisch in einem TImage angezeigt. „ZeichneSpielfeld“ zeichnet das Spielfeld in das Image. In meinem "Game of Life" sind lebendige Zellen gelb und tote Zellen grau dargestellt. Im TMainMenu (MainMenu1) unter dem TMenuItem (Muster) hat der Benutzer jedoch noch die Möglichkeit andere Farmmuster auszuwählen.

Um diesen Lösungsvorschlag zu realisieren, hat der Benutzer die Möglichkeit, Zellen auf lebendig bzw. tot zu schalten und sich dann die nächste Generation anzuschauen. Der Anwender hat die Möglichkeiten mit der Maus die Zelle anzuklicken. Wenn man auf eine Zelle klickt, wird der Status umgekehrt, d.h. eine lebendige Zelle wird auf „tot“ gesetzt und eine tote Zelle auf „lebendig“.

Es gibt auch die Möglichkeit eine neue zufällige Verteilung zu generieren und auszugeben. Das kann durch ein onclick-Ereignis auf den Button btn_ZufallClick aufgerufen werden. Die Anzahl der Lebewesen (voreingestellt sind 500, das kann der Anwender aber verändern) wird aus dem TEdit (edt_anzahl) eingelesen und an die Prozedur „InitSpielfeld“ übergeben. Diese löscht zunächst das Spielfeld (ruft LoescheSpieldfeld auf) und verteilt die Lebewesen zufällig über FuegeLW auf das Spielfeld.

Eine fortlaufende Generationsfolge kann man sich anzeigen lassen, indem man auf den Spiel starten - Button (btn_start2) klickt. Dadurch wird der Timer aktiviert. Durch das Betätigen des Spiel anhalten - Buttons (btn_stop2) wird das Spiel bzw. der Timer angehalten. Die Geschwindigkeit des Timers kann durch die drei RadioButtons (rbtnschnell, rbtnnormal, rbtnlangsam) verändert werden. Es besteht auch die Möglichkeit jeweils nur eine Generation weiter zu berechnen. Das passiert bei jedem Klick auf den nächste Generation - Button (btn_start).

Um sich einfacher im Anzeigefenster des Spielfeldes zurechtzufinden, wird die Mausposition durch ein Label angezeigt. Über den Menüpunkt Datei -> Beenden kann der Anwender das Programm verlassen. Durch den Menüpunkt Datei - > Neues Spiel bekommt der Anwender ein leeres Spielfeld (nur tote Zellen), darauf kann er Zelle anklicken und „lebendig“ machen und sich eine zufällige Verteilung generieren lassen (s.o.).

3. Quelltextdokumentation

In diesem Abschnitt werden die wichtigsten Variablen, Prozeduren und Funktionen erläutert:

Globale Variablen:

Form1: TForm1;

Spielfeld:Array[0..51,0..51] of Integer;

generation,ueberlebt,geboren,gestorben: Integer;

farbefeld,farbezelle,farbestrich: Integer;

bMouseButtonDown: boolean;

altx,alty:Integer;

„generation“, „ueberlebt“, „geboren“ und „gestorben“ werden für die Statistik benötigt. Bei jeder neu berechneten Generation wird „generation“ um eins erhöht. „ueberlebt“, „geboren“ und „gestorben“ erhöhen sich in der Prozedur „UpdateZelle“, je nachdem ob eine Zelle überlebt hat, geboren wurde oder gestorben ist. Diese Werte werden auf null gesetzt wenn eine neue zufällige Verteilung generiert wird oder ein neues Spiel gestartet wird. Das ist der Grund warum die Variablen global deklariert werden müssen. Über „farbefeld“, „farbezelle“ und „farbestrich“ können die verschiedenen Spielfeldmuster verändert werden.

bMouseButtonDown ist true, wenn der Benutzer eine Maustaste drückt. Sie wird in der Prozedur Image1MouseMove verwendet.

altx und alty speichern die letzte Position ab, an der eine Life-Zelle angeklickt worden ist und dienen dazu, dass eine Life-Zelle beim MouseMove-Event nicht mehrmals hintereinander invertiert wird.

Prozeduren und Funktionen:

Die Prozeduren „FuegeLWein“, „EntferneLW“, „LoescheSpielfeld“, „UpdateZelle“, „InitSpielfeld“, „UpdateSpielfeld“ und „ZeichneSpielfeld“, sowie die Funktion „ZaehleNachbarn“ wurden im Unterricht fertig gestellt.

[...]

Details

Seiten
14
Jahr
2007
ISBN (eBook)
9783638872249
Dateigröße
398 KB
Sprache
Deutsch
Katalognummer
v80004
Institution / Hochschule
Ruhr-Universität Bochum – Geographisches Institut
Note
1,3
Schlagworte
Programmierung Game Life John Conway Programm Array

Teilen

Zurück

Titel: Programmierung Game of Life