09.11.2008, 14:09
Screenshot des laufenden Game of Life in einem X-Fenster

Conway's Game of Life #2

License: GPL v2

Download: life.tar.gz (5,6 KB)

Diesmal in C geschrieben sowie den unten angegebenen Algorithmus verbessert, bietet es jetzt hinreichende Performance, sodass eine flüssige Darstellung mit einem 700x700 Pixel großen Spielfeld (mit nicht allzu veralteter Hardware) möglich ist.

Das Programm macht keinen Gebrauch von /dev/urandom mehr, sondern nutzt die C-eigene rand()-Funktion um das Spielfeld zu initialisieren. Zur graphischen Darstellung wird die SDL-Library benötigt, allerdings bietet das Programm ebenso wie das Untere einen Modus zur Darstellung in einem Terminal, sodass die SDL-Bibliothek (auch zum Kompilieren, siehe Makefile) keine zwingende Voraussetzung ist.

Die unten angegeben Informationen zu den VT100-escape-codes und den Umgebungsvariablen stimmen auch für diese Version.

Da dieses Programm zum Lernen von C dienen sollte, besitzt es eine austauschbare Matrix-Datenstruktur. Momentan ist nur eine solche, die ein 1-dimensionales Array nutzt, beinhaltet, allerdings haben meine Tests gezeigt, dass der Zugriff mit einer 2D-Matrix in diesem Fall schneller sein kann, sodass eventuell noch ein Update mit selbiger erfolgen wird.

20.07.2008, 04:45
Screenshot des laufenden Game of Life in MIPS Assembler

Conway's Game of Life

License: GPL v2

Download: life.s (20,3 KB)

Hierbei handelt es sich um ein in MIPS 32-Assembler geschriebenes Game-of-Life-Programm, welches die aktuelle Terminalumgebung nutzt um das Spielfeld darzustellen. Es benötigt eine Unix-artige Umgebung, die Zugriff auf /dev/urandom bietet um das Spielfeld zu initialisieren.

Sind die Umgebungsvariablen COLUMNS und LINES gesetzt (zur Not via export COLUMNS LINES), wird die Größe des Feldes daran angepasst.

Weiterhin nutzt das Programm VT100-escape-codes um die Darstellung (vor allem den Neuaufbau des "Bildes" zu beschleunigen. Diese Funktion ist durch Übergabe des Parameters -D abschaltbar. Zusätzliche Geschwindigkeit für die Darstellung kann durch die Aktivierung eines internen Puffers für die Ausgabe erzielt werden (-b).

Auch ohne ein VT100-kompatibles Terminal/-kompatiblen -Emulator funktioniert life.s

Eine Schwachstelle des Programms liegt in der Methode, die den neuen Wert für eine Zelle berechnet, das wäre wohl der erste Ansatzpunkt zur Optimierung. Weitere Stellen gibt es sicherlich auch noch, da ich mich aber länger nicht mit diesem Programm beschäftigt habe, fällt Einschätzung schwer. Dennoch ist die Geschwindigkeit meiner Meinung nach akzeptabel für eine simple Spielerei...

Entwickelt und getestet wurde es mangels MIPS-Hardware mit Hilfe des SPIM MIPS Simulators.

Hier die Übersicht über die unterstützten Optionen wie vom Programm angezeigt:

Conway's Game of Life
~~~~~~~~~~~~~~~~~~~~~
arguments:
  -c NUM       width of field
  -l NUM       height of field
  -b           use buffered output (faster than system calls)
  -n           don't wait for user input after every step
  -D           non-VT100-compatible terminal, fall back to standard scroll mode
  -C           character to draw (default is '#')

This program is Free Software and released under the terms of the
General Public License v2 by Franz Brausse

Hint: The shell command "export LINES COLUMNS" will enable automatic field size
      adjustment