This article or section may not have content matching Scratch Wiki editing standards. Please improve it according to Scratch Wiki:Guidelines and Scratch Wiki:Editing Conventions. (January 2021) Reason: unfinished |
Please expand this article or section. You can help by adding more information if you are an editor. More information might be found in a section of the talk page. (January 2021) |
For more information, see Conway's Game of Life on Wikipedia.
Conway's Game of Life is a simulation of an infinite world of 'live' and 'dead' square cells.
The rules will first be explained, and then one can either try and code their own project, or carry on reading and try to recreate the example script.
The Rules
Every cell interacts with its eight neighbors, which are the cells that are horizontally, vertically, or diagonally adjacent. At each step in time, also called a tick, the following transitions occur all at once:
- Any live cell with two or three neighbors survives (stays blue).
- Any dead (white) cell with three live neighbors becomes a live cell.
- All other cells die in the next generation. Similarly, all other dead cells stay dead.
The initial pattern constitutes the seed of the system. The first generation is created by applying the above rules simultaneously to every cell in the seed. The rules continue to be applied repeatedly to created further generations.
How to create it
How to draw a single cell
The following is the script to draw a single square cell. It will be used in the rendering of the game.
define cell x(x) y(y) size(size) state(state) if <(state) = [alive]> then set pen color to (#fbfbfb) else set pen color to (#000000) end set pen size to (size) go to x(x) y(y) pen down pen up if <(size) > (2)> then set pen size to ((size)/(3)) go to x((size)+((size)/(-2))) y((size)+((size)/(-2))) pen down go to x((size)+((size)/(2))) y((size)+((size)/(-2))) go to x((size)+((size)/(2))) y((size)+((size)/(2))) go to x((size)+((size)/(-2))) y((size)+((size)/(2))) go to x((size)+((size)/(-2))) y((size)+((size)/(-2))) pen up end
Rendering Script
First, set the variables
(Stage width) (stage height) (#) (x) (y)
Then, one should make a custom block defined as the following:
define render erase all set (# v) to (1) set (x v) to (-240) set (y v) to (-180) repeat (Stage height) repeat (Stage width) draw cell x(x) y(y) size((360)/(Stage height)) status (item (#) of (pixel values v)):: custom change (x v) by ((480)/(Stage width)) change (# v) by (1) end set (x v) to (-240) change (y v) by ((360)/(Stage height)) end
Setup
A setup block should be created and defined as the following. One has to check the "Run without screen refresh" checkbox for this to work as it should.
define setup delete all of (pixel values v) repeat ((Stage width)*(Stage height)) add (dead) to (pixel values v) end
Then, one should add the final script:
when green flag clicked set (Stage height v) to (72) set (Stage width v) to (96) setup:: custom forever update:: custom render:: custom end