Conway's Game of Life is a small, simple set of rules for cellular automata. Operating like a simulation, there is a starting state where certain points on a 2 dimensional board are populated, and the rules of the game determine the next state, generating interesting, unpredictable, and ultimately lifelike patterns over time.
This project was inspired by http://gameoflifetotalwar.com/ (hereafter CGOLTW). You should check it out. It updates the classic set of rules, which support only a single population, for multiple populations which are able to compete for space and population.
This project exists not to compete with CGOLTW but as a supplementary project for exploration and learning. My initial motivation was to make a "proving ground" for searching for simple shapes and patterns with high birth rates for determining successful CGOLTW strategies.
gem install conway_deathmatch
# defaults to 70x40 board and an acorn shape
conway_deathmatch
# multiplayer
conway_deathmatch --one="acorn 30 30" --two="die_hard 20 10"
- acorn
- beacon
- beehive
- blinker
- block
- block_engine_count (block engine, minimal point count)
- block_engine_space (block engine, minimal footprint)
- block_engine_stripe (block engine, 1 point tall)
- boat
- die_hard
- glider
- loaf
- lwss (lightweight spaceship)
- rpent (R-pentomino)
- swastika
- toad
Just one file, aside from shape loading. Have a look-see
This implementation focuses on simplicity and ease of understanding. Currently there are no performance optimizations. I would like to use this project to demonstrate the process of optimization, ideally adding optimization on an optional, parallel, or otherwise non-permanent basis -- i.e. maintain the simple, naive implementation for reference and correctness.
Coming into this project, I had significant background knowledge concerning Conway's Game of Life, but I could not have recited the basic rules in any form. After being inspired by competing in CGOLTW, I read their one background page and then the wikipedia page. I deliberately avoided any knowledge of any other implementations, considering this project's implementation as of November 24 (2014) to be the naive, simple approach.
Researched optimizations are now an immediate priority.
As currently implemented, this project uses fixed boundaries, and boundary behavior is not standardized to my knowledge. For this project, out of bounds are treated as always-dead and unable-to-be-populated.
The rules for multiplayer are not standardized. I read about the CGOLTW approach, and this project's approach is similar but different. In CGOLTW, there are always 3 populations, and one population (civilians) is special, in that civilians are born where there is birthright contention. Birthright contention happens when a new cell must be generated, but none of the neighboring parents have a unique plurality. For this project, birthright contention is resolved with a random selection (TODO).