For this coursework we were to implement Conway’s Game of Life in C. This consists of a DLL and a program that calls the library for key functionality.
This was to implement a range of functions
read_in_file()
reads in the file from the filepointer infile
and stores the universe in the structure pointed to by u
. You must use dynamic memory allocation.write_out_file()
writes the content of the universe pointed to by u
into the file from the file pointer outfile
is_alive
returns 1 if the cell in that column and row is alive and 0 otherwisewill_be_alive()
returns 1 if that cell in that column and row will be alive in the next generation and 0 otherwise, assuming that cells outside the universe are always deadwill_be_alive_torus()
returns 1 if the cell in that column and row will be alive in the next generation and 0 otherwise, assuming a torus topologyevolve()
changes the universe from the current generation to the next generation. It used the function pointed to by the function pointer rule
print_statistics()
should calculate the percentage of cells that are alive in the current generation and the average percentage that have been alive in all the generations so farIt also had to support multiple universe structures in memory at the same time
The main challenge of this was to use dynamic memory allocation, whereby the program allocates memory as it is scanning the input file.
The program had to take a range of inputs to pass to the library, they can be seen as follows
-i input_filename
to specify that the initial generation of the universe should be read from a file. If this option is not selected, you should let the user type in the input-o output_filename
to specify a file into which the final generation should be output. If this option is not specified, you should output the final generation on the screen-g number_of_generations
to specify the number of new generations for which the game should be run (set to 5 if this option is not given)-s
to print statistics after the final generation has been output-t
to use the torus topology for the rule. If this is not specified, use the rule for the cells outside the universe being permanently deadI also had to create a makefile to compile both the library and command line program using GCC. The output of this was a program and a .so
library. The makefile also implements make clean
to remove all the files produced during compilation