Design, game of life
-
Ich brauch 2 2d arrays. Das erste ist aktuell. Das 2te die nächste generation. Also 180k einträge die auch noch geswapt werden
-
conway schrieb:
Ich brauch 2 2d arrays. Das erste ist aktuell. Das 2te die nächste generation. Also 180k einträge die auch noch geswapt werden
Wie gesagt hat das etwas mit Speicherplatz zu tun, aber auch das ist da nicht wirklich ein Problem. Für die Geschwindigkeit spielt es kaum eine Rolle, ob du da jetzt Cells, oder bools hast. (Ausser der Zugriff stellt sich schlussendlich als der Flaschenhals heraus). Aber wie gesagt mach dir da mal keine Gedanken. Programmiers und dann schau am Schluss, ob es wirklich etwas ausmacht. So am Anfang kann man das schwer sagen.
-
Hey, danke für die schnellen antworten. Der speicherplatz für klasseninstanzen müsste reichen. Mal ausrechnen
-
wenn ich mich recht erinnere gehts beim Spiel des Lebens darum, dass eine Zelle ihren neuen Zustand aus den alten Zuständen der 4 unmittelbaren Nachbarzellen berechnet. Ich würde da eine einzelne Datenstruktur nehmen, in dem Fall vermutlich sogar tatsächlich ein Array:
size_t width = 300, height = 300; Cell* cells = new Cell[2][width][height]; for (int i = 0; i < width; ++i) for (int j = 0; j < height; ++j) { //fülle cells[0][i][j] mit Initialwerten } for (size_t n = 0; n <= (num_steps/2)+1; ++n) { for (int i = 0; i < width; ++i) for (int j = 0; j < height; ++j) { //berechne cells[1][i][j] aus cells[0][i-1][j], cells[0][i][j+1] usw. } draw(cells[1]); if (num_steps % 2) break; for (int i = 0; i < width; ++i) for (int j = 0; j < height; ++j) { //berechne cells[0][i][j] aus cells[1][i-1][j], cells[1][i][j+1] usw. } draw(cells[0]); } delete[] cells;Das Ganze ist übrigens eine nette Aufgabe für Parallelisierung

-
pumuckl schrieb:
wenn ich mich recht erinnere gehts beim Spiel des Lebens darum, dass eine Zelle ihren neuen Zustand aus den alten Zuständen der 4 unmittelbaren Nachbarzellen berechnet.
Sogar alle 8 nachbarn sind entscheidend. Btw danke, aber deinen code kann ich auf dem handy zzt schwer entziffern. Bin mal gespannt.
Erste kopfrechnungen ergeben: array bool ca 180 KB, mit etwa 100B instanzen ~18 mb, hui
-
Erste kopfrechnungen ergeben: array bool ca 180 KB, mit etwa 100B instanzen ~18 mb, hui
Warum soll eine Instanz 100 B(yte?) gross sein?! Oder verstehe ich deine Aussage falsch? Wenn du nicht schon direkt bool Arrays benutzt, dann wirst du eh nicht viel speichern müssen. Das sollte also nicht soo viel ausmachen..
-
Kannst natürlich um Speicher zu sparen mit std::vector<bool> oder std::bitset<90000> arbeiten.
-
drakon schrieb:
Warum soll eine Instanz 100 B(yte?) gross sein?!
Hast Recht, war ein bissel viel.
pumuckl schrieb:
Das Ganze ist übrigens eine nette Aufgabe für Parallelisierung

Meinst Du das allgemein oder um Performance zu sparen?
Denn hiersteht:
Der Hauptgedanke des Spieles besteht darin, daß Leben und Tod gleichzeitig und nicht nacheinander auftreten. Die Regeln werden auf die gegebene Spielsituation angewandt, indem man nacheinander alle Felder untersucht und diese als Überlebende, als Opfer oder als Geburt kennzeichnet. Auf einen Schlag ergeben sich alle Veränderungen, und eine neue Generation entsteht.
Ich habe ein Javaprogramm gesehen wo threads "lediglich" zur performancesteigerung genutzt werden. Da wird das spielfeld durch 2,4 oder 8 (etc) geteilt. Die einzelnen Felder werden vom Nachbarn geweckt wenn sie veränderungen haben. die steuerung machen dann threads
-
conway schrieb:
pumuckl schrieb:
Das Ganze ist übrigens eine nette Aufgabe für Parallelisierung

Meinst Du das allgemein oder um Performance zu sparen?
Sowohl als auch. Derartige Berechnungen, wo wie hier alle Elemente einer Matrix quasi gleichzeitig berechnet werden lassen sich relativ einfach parallelisieren und sind daher häufig als Beispiel und/oder Übungsaufgabe in den entsprechenden Büchern und Vorlesungen anzutreffen. Natürlich macht in einer "echten" Anwendung parallelisierung nur dann Sinn wenn das Programm dann wirklich performanter läuft.
-
pumuckl schrieb:
Sowohl als auch. Derartige Berechnungen, wo wie hier alle Elemente einer Matrix quasi gleichzeitig berechnet werden lassen sich relativ einfach parallelisieren.
das werde ich im hinterkopf behalten.
Danke an alle.
Ich habe das grundgerüst des spiels in knapp 1 stunde aufgebaut.
2 array's waren überflüssig. In der klasse gibts dafürn bool act und bool next.Wie kann ich diesen Thread als gelöst markieren?
-
conway schrieb:
Wie kann ich diesen Thread als gelöst markieren?
indem du deinen ersten Betrag editierst und den Titel entsprechend änderst
