Lire ce document en français.
A Game of Life by John Conway" clone that runs in a hexagonal grid for crystal and snowflake simulations!
This is a game of life that runs on hexagonal grids to simulate crystal structures, like snowflakes.
- Custom board and grid management
- Cell types with modifiable metadata (age, coordinates, state, etc.)
- Easily expandable and editable ruleset!
These are the rules built in: https://clairelommeblog.wordpress.com/category/apmep-journees-2020/
Translates to:
- If there are 1,3,4,5 or 6 alive adjacent cells, the cell becomes alive on the next step.
- If there are 0 or 2 alive adjacent cells, the cell does not change.
If the candie
argument is passed, then the rule is:
- If there are 1,3,4,5 or 6 alive adjacent cells, the cell becomes alive on the next step.
- If there are 0 or 2 alive adjacent cells, the cell dies on the next step.
- Built in options for rendering in command line (Unix and windows)
- Pygame user interface, with age based colouring to make pretty snowflakes!
- Easy to add new rendering methods.
- Get interesting data about the simulation such number of cells alive over time and average age of a cell.
- Easy to make gifs (Pygame only) that make it easy to share your simulations with your friends.
- Also helps with showcasing larger boards that may be slow to run.
You will need:
- Python 3.7.7 or higher but lower than 3.10.
- All the dependencies in requirements.txt. From the base path of this git, run
pip install -r requirements.txt
to install them all.
Navigate to src
and run python main.py
. It should print some stuff about pygame then ---Game of Hex, starting!---
.
There are a couple command line arguements that you can use to change how it runs!
-h, --help show this help message and exit
-x X Width of the grid
-y Y Height of the grid
-f MAXFPS, --maxfps MAXFPS Maximum frames per seconds
-r RADIUS, --radius RADIUS Radius of the hexes (in pixels)
-o, --outline Only display hexagon structure outlines (laser cutting)
-t THICKNESS, --thickness THICKNESS Thickness of the outline lines (might be important for laser cutters.)
--text Use a text UI
-l, --lines Draw hexagon grid outline
--resolution RESOLUTION RESOLUTION Resolution of the window to open
-p, --previous Use previous settings
The first time you run the program, a settings.json
file will be created. The below picture was taken with: {"x": 190, "y": 135, "maxfps": null, "radius": 3, "text": false, "lines": false, "resolution": [1000, 700], "outline": false}
. This file is referenced when you use -p
.
If you don't select --text
, a Pygame window should open after a couple of seconds.
- The red part represents the "board". Click on it to place or remove cells.
- The purple part houses the buttons to control the simulation!
Pause / Resume
pauses or resumes the simulation. When you start the program, it is paused. When playing, it runs the simulation as fast as it can.Clear
resets the board.Step
runs one step of the simulation at a time.Make a gif
saves a gif of everything that has happened since the last clear or the start. It gets saved tosrc/img/gif
. They are ready to share!Outline SC
takes a screenshot of the outline of the alive cells (same as running-o
but just for one frame.) The picture is saved tosrc/img/outline
.Name SC
asks for a name in the terminal from which the program was launched, and then saves an image with the name in it. This can be used for education where students can all have their own picture printed out.Stats
opens mutliple matplotlib windows with stats on the average age of all cells alive, the number of alive cells and the increase per step
- The green part shows the framerate. When the board is paused this shows how many frames the drawing script can draw in a second and during simulation this is the number of simulation steps that were run in the last second.
If you use --text
, you can't really interact with the simulation in real time. In settings.py
, place the coordinates for cells that are to exist at the start in startCells = []
(list of tuples).
The numbers in the cells represent the age of the cell and the colour represents it's state.