Hallo,
ich muss für die Uni ein kleines (in meinen Augen, eher großes) Programm schreiben, es handelt sich hierbei um das Spiel Game of Life, es sollen zwei Klassen geschrieben werden, theoretisch kann ich mir da schon was vorstellen, wie ich rangehen könnte, leider sind meine Java-Kenntnisse einfach viel zu gering und ich schaffe nicht den ersten Einstieg.
Ein wenig praktische Hilfe wäre da wohl ganz gut.
Dies ist keine bitte zur kompletten Lösung, sondern nur eine erste Hilfe, meine Aufgaben möchte ich schon selbst machen
AUFGABE:
6. Übung
Game of Life
Aufgabe 1
Im Zuge der fortlaufenden Digitalisierung unserer Gesellschaft betrachten wir diese Woche einen weiteren
Klassiker, nämlich Conway’s „Game of Life“.
Bei diesem so genannten zellulären Automaten werden Zellen auf ein n xm-Raster verteilt, die sich nach
bestimmten Regeln vermehren oder sterben.
Lebendige Zellen sterben an Vereinsamung oder Übervölkerung, wenn
• sie weniger als zwei lebendige Nachbarn haben, oder
• sie mehr als vier lebendige Nachbarn haben
Tote Zellen werden bevölkert,
• wenn sie (genau) drei lebendige Nachbarn haben.
Die Berechnung erfolgt dabei automatentypisch schrittweise und gedächtnislos, also wird z.B. nicht miteinbezogen,
wieviele der Nachbarn im nächsten Schritt lebendig wären oder nicht.
Die Aufgabe besteht nun darin, zum einen die einzelnen Zellen und zum anderen das „Gitter“ zu implementieren.
Hierfür brauchen Sie zwei (eigene) Klassen, nämlich Cell und Grid. Außerdem stehen folgende Dateien zur
Verfügung
• Das Interface ICell, welches sie als Muster für die Zellen und nicht verändern sollen,
1
• Das Interface IDisplayable, welches sie als Muster für die Gitter-Klasse verwenden und nicht verändern
sollen,
• Die Klasse Main (gegeben im Quelltext) startet die Applikation (es handelt sich um ein Applet),
• Die Klasse GameOfLifeGUI (gegeben als binäre Datei) beinhaltet den Fensterinhalt und kümmert sich
um die Darstellung,
Hinweis: Sie finden die notwendigen Vorlagen im Stud.IP. Entwickeln Sie entweder im selben Package oder
importieren Sie entsprechend . . .
1.1 (Cell) Schreiben sie eine Klasse Cell, die eine Zelle mit ihren Zuständen (tot oder lebendig) und
den vorgegebenen Funktionen implementiert. Hierzu gehört neben dem Getter isAlive() die Berechnung des
nächsten Schrittes in computeNextState() und die tatsächliche Ausführung in stepToNextState(). Diese
Methoden sind im Interface ICell vorgegeben, welches die Klasse entsprechend implementieren soll.
Entwerfen Sie zudem eine (private) Funktion getNeighbourCount(), die entsprechend die Zahl der lebendigen
Nachbarn zurückgibt (Warum taucht diese Funktion nicht im Interface auf? Warum sollte man diese Funktionalität
in einer Extra-Funktion auslagern? Erklären Sie dies ihrem Übungsleiter).
Zudem brauchen Sie natürlich einen sinnvollen Konstruktor, der die Zelle gültig intialisiert.
Implementieren Sie die Attribute zur Position mit dem Schlüsselwort final.
Es lohnt sich (performancetechnisch), wenn jede Zelle ständig eine Liste ihrer Nachbarn führt. Warum? Mit
welchen Eigenschaften (private/public, static oder nicht und von welchem Typ) führen sie diese Liste? An
welcher Stelle füllen sie die Liste sinnvoll mit Werten? Erklären Sie ihren Ansatz.
1.2 (Grid) Schreiben Sie eine Klasse Grid, welche das Interface IDisplayable implementiert und damit
die Methoden getRows(), getCols(), iterate() und getCellAtPosition(int x, int y). Implementieren
Sie dabei das Spielfeld topologisch als Torus (siehe auch Torus ? Wikipedia).
Schreiben Sie für diese Klasse einen Konstruktor public Grid(), der als so genannter „Chain Constructor“
einen weiteren zu schreibenden Konstruktor public Grid(int rows, int cols) mit Standardwerten aufruft.
In diesem initialisieren sie schließlich die eigentliche Datenstruktur zum positionsbehafteten Speichern der
Zellen und füllen diese zufällig mit lebendigen und toten Zellen.
Hinweis: Verwenden Sie am besten Bibliotheksmethoden der Klasse Random. Finden Sie in der Java API heraus,
welche am geeignetsten ist.
Die Datenstruktur zum Verwalten der Zellen ist als Liste von Listen von Zellen (also List<List<ICell> >) zu
implementieren. Das folgende Bild illustriert diese Hierarchie:
2
1.3 (Starten) Binden Sie am besten das Applet in einem Browser ihrer Wahl ein (Sicherheitseinstellungen
beachten!). Im Internet finden Sie entsprechende Anleitungen.
UPDATE: Im Stud.Ip steht inzwischen eine Applet-geeignetere Variante der Dateien zum Download, die man
direkt im Browser ausprobieren kann!
Die Klasse GameOfLifeGUI bietet Ihnen zwei Setter an:
• setWait(int n) setzt die Zeit, die zwischen Iterationen gewartet wird, der Standardwert ist 100 (Millisekunden)
• setGridStep(int n) regelt die Grobkörnigkeit des Rasters. Bei Werten unter 3 bricht das Programm
mit einem Fehler ab.
Habe alles was benötigt wird hochgeladen:
http://karols-versand-shop.de/Neu/vorlage.zip
Wenn sich jemand die Zeit nehmen könnte wäre ich wirklich sehr sehr dankbar.
Mit freundlichen Grüßen
ich muss für die Uni ein kleines (in meinen Augen, eher großes) Programm schreiben, es handelt sich hierbei um das Spiel Game of Life, es sollen zwei Klassen geschrieben werden, theoretisch kann ich mir da schon was vorstellen, wie ich rangehen könnte, leider sind meine Java-Kenntnisse einfach viel zu gering und ich schaffe nicht den ersten Einstieg.
Ein wenig praktische Hilfe wäre da wohl ganz gut.
Dies ist keine bitte zur kompletten Lösung, sondern nur eine erste Hilfe, meine Aufgaben möchte ich schon selbst machen
AUFGABE:
6. Übung
Game of Life
Aufgabe 1
Im Zuge der fortlaufenden Digitalisierung unserer Gesellschaft betrachten wir diese Woche einen weiteren
Klassiker, nämlich Conway’s „Game of Life“.
Bei diesem so genannten zellulären Automaten werden Zellen auf ein n xm-Raster verteilt, die sich nach
bestimmten Regeln vermehren oder sterben.
Lebendige Zellen sterben an Vereinsamung oder Übervölkerung, wenn
• sie weniger als zwei lebendige Nachbarn haben, oder
• sie mehr als vier lebendige Nachbarn haben
Tote Zellen werden bevölkert,
• wenn sie (genau) drei lebendige Nachbarn haben.
Die Berechnung erfolgt dabei automatentypisch schrittweise und gedächtnislos, also wird z.B. nicht miteinbezogen,
wieviele der Nachbarn im nächsten Schritt lebendig wären oder nicht.
Die Aufgabe besteht nun darin, zum einen die einzelnen Zellen und zum anderen das „Gitter“ zu implementieren.
Hierfür brauchen Sie zwei (eigene) Klassen, nämlich Cell und Grid. Außerdem stehen folgende Dateien zur
Verfügung
• Das Interface ICell, welches sie als Muster für die Zellen und nicht verändern sollen,
1
• Das Interface IDisplayable, welches sie als Muster für die Gitter-Klasse verwenden und nicht verändern
sollen,
• Die Klasse Main (gegeben im Quelltext) startet die Applikation (es handelt sich um ein Applet),
• Die Klasse GameOfLifeGUI (gegeben als binäre Datei) beinhaltet den Fensterinhalt und kümmert sich
um die Darstellung,
Hinweis: Sie finden die notwendigen Vorlagen im Stud.IP. Entwickeln Sie entweder im selben Package oder
importieren Sie entsprechend . . .
1.1 (Cell) Schreiben sie eine Klasse Cell, die eine Zelle mit ihren Zuständen (tot oder lebendig) und
den vorgegebenen Funktionen implementiert. Hierzu gehört neben dem Getter isAlive() die Berechnung des
nächsten Schrittes in computeNextState() und die tatsächliche Ausführung in stepToNextState(). Diese
Methoden sind im Interface ICell vorgegeben, welches die Klasse entsprechend implementieren soll.
Entwerfen Sie zudem eine (private) Funktion getNeighbourCount(), die entsprechend die Zahl der lebendigen
Nachbarn zurückgibt (Warum taucht diese Funktion nicht im Interface auf? Warum sollte man diese Funktionalität
in einer Extra-Funktion auslagern? Erklären Sie dies ihrem Übungsleiter).
Zudem brauchen Sie natürlich einen sinnvollen Konstruktor, der die Zelle gültig intialisiert.
Implementieren Sie die Attribute zur Position mit dem Schlüsselwort final.
Es lohnt sich (performancetechnisch), wenn jede Zelle ständig eine Liste ihrer Nachbarn führt. Warum? Mit
welchen Eigenschaften (private/public, static oder nicht und von welchem Typ) führen sie diese Liste? An
welcher Stelle füllen sie die Liste sinnvoll mit Werten? Erklären Sie ihren Ansatz.
1.2 (Grid) Schreiben Sie eine Klasse Grid, welche das Interface IDisplayable implementiert und damit
die Methoden getRows(), getCols(), iterate() und getCellAtPosition(int x, int y). Implementieren
Sie dabei das Spielfeld topologisch als Torus (siehe auch Torus ? Wikipedia).
Schreiben Sie für diese Klasse einen Konstruktor public Grid(), der als so genannter „Chain Constructor“
einen weiteren zu schreibenden Konstruktor public Grid(int rows, int cols) mit Standardwerten aufruft.
In diesem initialisieren sie schließlich die eigentliche Datenstruktur zum positionsbehafteten Speichern der
Zellen und füllen diese zufällig mit lebendigen und toten Zellen.
Hinweis: Verwenden Sie am besten Bibliotheksmethoden der Klasse Random. Finden Sie in der Java API heraus,
welche am geeignetsten ist.
Die Datenstruktur zum Verwalten der Zellen ist als Liste von Listen von Zellen (also List<List<ICell> >) zu
implementieren. Das folgende Bild illustriert diese Hierarchie:
2
1.3 (Starten) Binden Sie am besten das Applet in einem Browser ihrer Wahl ein (Sicherheitseinstellungen
beachten!). Im Internet finden Sie entsprechende Anleitungen.
UPDATE: Im Stud.Ip steht inzwischen eine Applet-geeignetere Variante der Dateien zum Download, die man
direkt im Browser ausprobieren kann!
Die Klasse GameOfLifeGUI bietet Ihnen zwei Setter an:
• setWait(int n) setzt die Zeit, die zwischen Iterationen gewartet wird, der Standardwert ist 100 (Millisekunden)
• setGridStep(int n) regelt die Grobkörnigkeit des Rasters. Bei Werten unter 3 bricht das Programm
mit einem Fehler ab.
Habe alles was benötigt wird hochgeladen:
http://karols-versand-shop.de/Neu/vorlage.zip
Wenn sich jemand die Zeit nehmen könnte wäre ich wirklich sehr sehr dankbar.
Mit freundlichen Grüßen