Programmierung Game of Life

Game of Life mit Delphi 5.0


Seminararbeit, 2007

14 Seiten, Note: 1,3

Anonym


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.

[...]

Ende der Leseprobe aus 14 Seiten

Details

Titel
Programmierung Game of Life
Untertitel
Game of Life mit Delphi 5.0
Hochschule
Ruhr-Universität Bochum  (Geographisches Institut)
Veranstaltung
Programmierung
Note
1,3
Jahr
2007
Seiten
14
Katalognummer
V80004
ISBN (eBook)
9783638872249
Dateigröße
398 KB
Sprache
Deutsch
Anmerkungen
9 Seiten Programmcode im Anhang
Schlagworte
Programmierung, Game, Life, John Conway, Programm, Array
Arbeit zitieren
Anonym, 2007, Programmierung Game of Life, München, GRIN Verlag, https://www.grin.com/document/80004

Kommentare

  • Noch keine Kommentare.
Im eBook lesen
Titel: Programmierung Game of Life



Ihre Arbeit hochladen

Ihre Hausarbeit / Abschlussarbeit:

- Publikation als eBook und Buch
- Hohes Honorar auf die Verkäufe
- Für Sie komplett kostenlos – mit ISBN
- Es dauert nur 5 Minuten
- Jede Arbeit findet Leser

Kostenlos Autor werden