x404.co.uk
http://www.x404.co.uk/forum/

Cellular Automata FTMFW!
http://www.x404.co.uk/forum/viewtopic.php?f=4&t=14919
Page 1 of 1

Author:  Fogmeister [ Mon Oct 10, 2011 8:27 am ]
Post subject:  Cellular Automata FTMFW!

Read an article the other day about generating random land maps using cellular automata.

Cellular automata is a system in which there exists a grid of cells. The system steps through generations of the grid and for each subsequent generation the cells change state depending on the state of their neighbours in the previous generation.

A popular known example is Conways Game of Life. http://www.bitstorm.org/gameoflife/

Anyway, by using a very simple set of rules you can create organic looking land/sea maps very easily. (i.e. looking like something out of Sim City or Red Alert etc...)

The rules are...
If a land cell is surrounded by at least 4 other land cells it remains land. Otherwise it changes to sea.
If a sea cell is surrounded by at least 5 land cells it changes to land. Otherwise it remains sea.

First create a random map of land/sea cells with equal probability...

Code:
.X..XXX....X..XX.........XXX..X..X..X...X.....XX.X..XX.X.XX.X.XX..XXX.XX.XX..X..XX...X.X..X..X..X..X
.X..X.XXX..XXXXXXX..XX...XXX.X.XX.X.XXXX.X....XXXX.X....XX.XX..X.X..X.X.XXX....XX.X.XXX..XXX...X.X..
XXXXX..XX...X.X....XX.XX.X.XXX.X....X...X...XX...XX.XX.X.....X.XXX.X.XXX..X.XXXX.X..X...XX...X.X.X..
.XXX....X...X...XX..X.XX.X.X....X..XX..X...X.XX..X...X.X.XX..X.....X...XXX.XXXX..XXX.X.X..XX.XXX.X.X
..XXXXX...X..X....XX...X..X.X.X.....XXXX...XX....XX...XXX..X.X...X.XXX...X.XX.X...X...XX.XX...X..XXX
XX...XX.XX.XX.X.XX...X..XX.XX.X.XX..XXX..X...XXX.X.X.XXX......XX.XX.......XXXX.....X.XX..XX..XX.XX.X
X.X...XX....XX.X..X.X.X..XX.XXXX..XXXXX.....X...X.X...XX...X..XX...XX.X....XX..X..XX.....X.....X...X
XXXXX..X..XXX.XXX..XX.X..X..X....X.X..XXX..XXXXXXXXX...XXX.X...X.XXXXXX.XXXXXXXXXXXXXX.....XXX.XXX..
.XXX....XXX.......XXX..X.XXX.XXX.XXX..XX.XX.XXXX..XX.X.X.XX.......XX..XXX.X.X.XXXX..XXX.....XXX.X...
X..X..XX...XX.XX......X...X.X...XX..XX.X.X.X.X.XXXXXXXX...XX..X.XXXXXXXX....X.XX.....X...XX..XX.X.XX
X..XXX.XX.X.X...X....XXXXXXX..X...X.X..X.X....X.XXX...XXX..XXX.XXXX.XXXXXXX..XXXXXXX.........XX.....
..X.X.....XXX.X..X.X.XX....XXX.X.X.X..XXXXX..X...XX.XX....XXX.X.X.XXX.XXXXXXX..XXXX...X.X..XXX.....X
.X.X.....XX..X...X..X..XX...XX.X.XX.XX..X....XXX.....X...XXX.XX..X..X.X.XXX.XXX..XXXX...X.XXX.XX.XX.
....XX.XXXXX..X.XX.X.X.XX.XXXXX.X.......XXXXXXX......XX..XXX.X.XX.XXXXX..XX...X.X.XX..XXXX..XX.XXXXX
.XXXX...XXX.X......XXX.X...XXXXXX.X..X..X......X.X.XXXX.....X.X.X...X.XXXXXXXX.XXXX.X......X.XX.XX..
....XX.XXXX.....XXX.XXXXX.XXXXXXXXX...XX...X..X.X..X.X..XX.X.XX..XXXX.X.X......XXX.XXXXX....X...X..X
.X.X.X...X..X.X.....XXXX..XX.....X.X.X...X..XXX..XX..X..X.X.X..X.XXX.X.XXX..XXXX.X.X....X..XX..X....
.XX..X.XX.X...X..XXXX..XXX.X....X.X.XX.....XXX....X...X...X.X.X.XX..XX..X..X...XX.XXX..X.XX...XXX.X.
X..X..XXXX..XXX..X.XX..X.....X.XX.......X.XXXXX.XXX..XX.....X.X...X...XXXXXX...XXXXX...X.....XX..X..
.X.XX....X..X......X..XXXXX..X.XXX.X.XXX..XXX.X....XX.XX.XXXXXX.X..X.XXXX..X.XXX..X..X.XXXX.X...XX..
...XX.XXXXX..XXXXXXX..XXXXXX....XX..X.X......XXXXXXX..XX.X...X.XXXX....X..X....XX.X..X.....X....X.X.
...X.XXX...XX.XXXXX..XXXXXX.X.X.X..X..XX.XX..XXXXX..X.X.XX.X.X.X.X.XXX.X...X..XX.XXXXX..XXXXXX.X....
...XXXXX..XXX.XXX.XX.X.XXXXX.XX.XXXX.X.XXXXXXX..XXX...XX.XX.XX.X..X..X..X.XXX..X...XX.X..XX.X....XXX
XX.XXX......XX.X.XXXXXX.........XX.X..XX......XX.XXXXXX.XXXXX..XXX...X.XXX.X...X..XX.X.XXX.XXXXX.X.X
X.XX..XXXX.X..X.XXXX.X.XX.XXX...XXXX.X....X....XXX.XXX.X..XXXXXX.X.XXXX...XX....XXX.X....X.....XX...
....X...XXX.X.XX.X.X.XX...XXXX..X.XX.XXXX..XX..XX..X.XXX.X.XXX..XXX..X.X.X......X.XXX.XXXXX....XXX.X
XXX.X.XXXXXX....X..XX.X...X.X..X..XX..X.XX...XXXX.XX....XXX....X...X..XX..........X.X...XXX.XX..X.XX
..XX.XXXXXX.......XXXXXXXXXX.....XX.X.X..X......XXX...XX.XX.X.X.XXXXX......XX.XX..X.X..X.X..X.X....X
.XXXX........X.......XXXXX....X...X.XX..X.....X.X.XXXX..XXXXXX..XX.XXX...XX..X.XX..XXX.X.X.XXXXXX..X
..XX.XXX..X.X..XX.XX.XXXX..X.XX...X..X.X..X..XX..XXX..X....X.XXX...X..XXXX.X.XX...XXX.....X.X.XXX.XX
X...X..XXX....X.XXX...X..X.XXX.X.XXX.X..XX..XXX.X...XXX..X..X...X.XXXX......XX....XXX...X.X.XXXXX.XX
X.X...XXX....XXXXX..X.....XXXXX...X..XX...XX...X..XX.XX.X.XXX.XXX..XXX...X..XX......XX.X..XX.X.X..XX
....XXX.X.XX.XXX...X....X....X..XX...XX.XX.XX..XX.XX.X.X.XXX.XXXX.X..X.XX..XXXX.X....XXXX.XX.XXX.XX.
.X...XX..XX.X.X....XXXXXXX..XX.X.X.XX.X.X...X.....X.X....X..X....X.X.X..X..X....XX.X...XXX...X...XXX
.XXXXXX.X.XXXXXX.XXXXX..XX...XX.X.X...X...XX..XXX.X.X.XX.......X.X...XXXX.XXX.XXX.XXX....XX..XXX.X..
XX.XXXX.X.X.XXXX.......X...XX.XX.XXXXXXX..XXXXXX..X...XX..XX..XX.X.X.X.X..XXXX...X.XXX.XXXX...XXX.X.
X......XX.XXXX...XX..X..XX...XXX...X..XX...XX.XXX..X...X.X.X.XXXXX.....X..X.XXXXX.XXXX...XXXXX.XXX..
..X.X.XX..XXXX.X....XX.XXX.XX.XXXX..X.....X.XXX.X.XX.XX.X.X.XXX.XX..X...XXXXXX...XXXXX.XX.X...X.X.XX
..XX...X.XX.X..XXX.XXX..XXXX..X.X....XXXXX.XXXXXXXX.XX....X.XXX........XXXX.....X..X..XX.X.X.X..XXXX
XXX.XXX.....X.XX.......XX...XXX.X...XXX...XX...X.X.X.XX...XXXX.X..X.XX.XX.X..X..XXXXX..XXXXXX.XXXXX.
.X.XXXX.XXXX.XX.XXXX...X....XXX.XXXXXXXXX.XXXXXXXX.XXX.XXXXX.XX....X..XXX.X..XX......XX...XXXXXX..XX
...X.X.XXXX..X..XXXX..XXX.XX.X..XX.X.....X...X..X....XX..X...X.X.XX.XXXXXX.X.X..XX....X.X..X..XX...X
X.XX.XX.X..X...XXX..X.X.XX.X...XXX.XX..X...X..X......XX.XXXXXXXXX.XX.XXX...XX.XXXXX........XX.XXXXXX
..X.XX.....X..XX.XX..X.X.X.........XXXX..XXX.XX.XXXX..X.X...XX...X..XX...X.....X.XXX.X.XXX....X.XX..
.X....XXX.....XXX.XX..X.XX...X..XXXX.XX.XXX.XXXX.X.XX.XXXX..XXX....X......XXX......XX......XX.XX..XX
...X..X.X..XXXXX..X...X....X.....X.X.XXX.XXXXXX.XX..XX.XX.XX...X...X.XX....X....XXX..X..X..X.XXX.XX.
.....XX..XX...XX.X....X.XXX...XX..X.XXXXXXXXX.X.X.XXX.XX...XXX.XX...XX..X...XX..X.X.X..X..X...X.X.X.
XX.......X.........XXXX.......XX......X...XXX.X.X...X..XX.X....X...X.X.X.XX....XXX......X.X....X....
XX.XX...X.XX.XX..XX.XXXXX.X...X..XXX.X..X.XX..X.X..X.X.....XXXX.XXX.X.X.X..X....XXX.....X..X...X.X.X
.XXXXXX.XXXX...X..X...XXX.X..XXXX...XX...X...X.XXXX..XX.X..X.X.X.XX..XX.X.X........X.X.....X.XX.XXX.


and then iterate through the map 8 times making the conversion (I made the conversion on all cells simultaneously by creating a duplicate map and then copying it to the original in one go).

Et voila!

Code:
...............................................XX...................................................
..XX......................XX..................XXXX.......................XX...X.....................
.XXXX....................XXXX................XXXXXX.....................XXXXXXXX....................
.XXXX....................XXXX................XXXXXX.....................XXXXXXX................XX...
.XXXX....................XXXX.......XX.......XXXXXX......................XXXXX................XXXX..
.XXXX....................XXXXX.....XXXX......XXXXXXX..XX...........XX....XXXXX................XXXX..
.XXX.....................XXXXX....XXXXXX....XXXXXXXXXXXXX.........XXXX..XXXXXXX...............XXXX..
.XXX.....................XXXXX....XXXXXXX..XXXXXXXXXXXXXXX.......XXXXXXXXXXXXXXXXXX..........XXXX...
........................XXXXX......XXXXXXXXXXXXXXXXXXXXXXXX......XXXXXXXXXXXXXXXXXXX........XXXXX...
......................XXXXXXX.........XXXXXXXXXXXXXXXXXXXXXX....XXXXXXXXXXXXXXXXXXX.........XXXX....
.....................XXXXXXXX..........XXXX....XXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXX.........XXXX....
..........XX.........XXXXXXXXX..........XX................XXXXXXXXXXXXXXXXXXXXXXXXXX.......XXXXX....
.........XXX........XXXXXXXXXXXX..........................XXXXXXXXXXXXXXXXXXXXXXXXXX.......XXXXXX...
........XXXX........XXXXXXXXXXXXX.........................XXXXXXXXXXXXXXXXXXXXXXXXXXX......XXXXXX...
........XXXX.......XXXXXXXXXXXXXXX.........................XXXXXXXXXXXXXXXXXXXXXXXXXX.......XXXX....
.......XXXX.......XXXXXXXXXXXXXXXX..........................XXXXXXXXXXXXXXX..XXXXXXXX...............
.......XXX........XXXXXXXXXXX..XXX................................XXXXXXXX....XXXXXXX...............
.......XXX........XXXXXXXXXX....XX..........XX......................XXXXXX....XXXXXX................
......XXXX........XXXXXXXXX.....XX.........XXXX.............XXX......XXXXX....XXXXXX................
....XXXXXX...XX..XXXXXXXXXX....XXX.........XXXXXXXXXXXXX...XXXXXX.....XXX.....XXXXXX................
...XXXXXX...XXXXXXXXXXXXXXXX...XXX..........XXXXXXXXXXXXXXXXXXXXXX............XXXXXXX....XXX........
...XXXXXX..XXXXXXXXXXXXXXXXX...XXXX...XX.....XXXXXXXXXXXXXXXXXXXXX.............XXXXXXX..XXXXX.......
...XXXXXX..XXXXXXXXXXXXXXXXX...XXXXXXXXXX....XXXXXXXXXXXXXXXXXXXXXX..............XXXXX..XXXXX.......
...XXXXXX...XXXXXXXXXXXXXXXX....XXXXXXXXX.....XXXXXXXXXXXXXXXXXXXXXXX.............XXX...XXXX........
...XXXXXXX...XXXXXXXXXXXXXXXX...XXXXXXXX.......XXXXXXXXXXXXXXXXXXXXXXX............XXX...XXX.........
...XXXXXXXX....XXXXXXXXXXXXXX....XXXXXXX.......XXXXXXXXXXXXXXXXXXXXXXX............XX....XXX.........
...XXXXXXXX.......XXXXXXXXXX.....XXXXXX........XXXXXXXXXXXXXXXXXXXXXX.............XX....XXXX........
..XXXXXXXX.........XXXXXXXX.......XXXX..........XXXXXX..XXXXXXXXXXXXX..............XX....XXXXXX.....
..XXXXXXX...........XXXXXX.........XX...........XXXXXX...XXXXXXXXXXXX..............XX.....XXXXXXX...
...XXXXXX............XXXX...XX...................XXXXX....XXXXXXXXXXXX.............XX.....XXXXXXXX..
....XXXXX.....XX...........XXXX...................XXXX....XXXXXXXXXXXX..............XX...XXXXXXXXXX.
.....XXXXX...XXXX..........XXXX...................XXXX....XXXXXXXXXXX................XXXXXXXXXXXXXX.
.....XXXXXXXXXXXX...........XXXX.....XX............XX......XXXXXXX..........XXX......XXXXXXXXXXXXXX.
....XXXXXXXXXXXX............XXXXXX..XXXX....................XXXXX..........XXXXXXX...XXXXXXXXXXXXXX.
....XXXXXXXXXXXX............XXXXXXXXXXXX....XXXX.............XXXX.........XXXXXXXXXXXXXXXXXXXXXXXXX.
....XXXXXXXXXXX.............XXXXXXXXXXXX...XXXXXX............XXXX.........XXXXXXXXXXXXXXXXXXXXXXXX..
....XXXXXXXXXXX............XXXXXXXXXXXXX...XXXXXXX..........XXXXX........XXXXXXXXXXXXXXXXXXXXXXXXX..
....XXXXXXXXXXXX.........XXXXXXXXXXXXXXX...XXXXXXXXXX......XXXXXX.......XXXXXX...XXXXXXXXXXXXXXXXXX.
...XXXXXXXXXXXXXX.......XXXXXXXXXXXXXXXX..XXXXXXXXXXXX....XXXXXX.......XXXXX......XXXXXXXXXXXXXXXXX.
..XXXXXXXXXXXXXXXX.....XXXXXXXXXXXXXXXXX..XXXXXXXXXXXXX..XXXXXX.......XXXXX...........XXXXXXXXXXXXX.
..XXXXXXXXX..XXXXXX....XXXXXXXXXXXXXXXX...XXXXXXX..XXXXXXXXXXXX....XXXXXXX..............XXXXXXXXXXX.
..XXXXXXXX....XXXXX.....XXX....XXXXXXX....XXXXXX....XXXXXXXXXXXX..XXXXXXX..................XXXXXXXX.
...XXXXXX.....XXXXX.............XXXXXX....XXXXXX....XXXXXXXXXXXX..XXXXXX.........XX.........XXXXXXX.
.....XX.......XXXXX..............XXXXXX..XXXXXXXX..XXXXXXXXXXXX....XXX...........XX..........XXXXXX.
..............XXXX...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................XX..........XXXXXX.
...............XX.................XXXXXXXXXXXXXXXXXXXXXXX..XXXX...............................XXXX..
....................................XXXXXXXXXXXXXXXXXXXX....XX......................................
......................................XXXXXXXXX.....................................................
..........................................XX.......................................................X
....................................................................................................


An orgainc looking map with very little effort!

Author:  jonbwfc [ Mon Oct 10, 2011 9:06 am ]
Post subject:  Re: Cellular Automata FTMFW!

Hm.. Could you use some sort of 'percentage over time when the cell is occupied' to define land height? i.e. get elevation/erosion as well?

Jon

Author:  Fogmeister [ Mon Oct 10, 2011 9:22 am ]
Post subject:  Re: Cellular Automata FTMFW!

jonbwfc wrote:
Hm.. Could you use some sort of 'percentage over time when the cell is occupied' to define land height? i.e. get elevation/erosion as well?

Jon

Hmm...

gimme a sec I'll see if I can get something working.

. = sea
+ = sea level land
O = level 1 land
X = level 2 land

...

one min...

Author:  Fogmeister [ Mon Oct 10, 2011 9:49 am ]
Post subject:  Re: Cellular Automata FTMFW!

OK, so I changed the meanings so that . is sea and the numebrs 1 to 7 represent different levels above sea level.

Using the same rules as previously I altered them slightly so that the land only counts when the level of the neighbour is the same or higher than the current cell.

i.e. if you have...
Code:
.34
232
123

then the middle cell's neighbour count = 3 and so it would move down a level on the next generation.

I had to add more levels so I could still iterate the map a decent number of times to get an organic looking map.

This is what I came up with...

Code:
.33.................................................................................................
1333.....355453...............5543....................323......3233...........421...................
2323213335555433............5677543.............33...35543....134354331.....13553.......221.........
.121212324555542...........56777754............332345455533....34553433....234553......1332.....11..
..........55433...........5777775543........1232343554545423....243443.....345545......2333.........
...........3432..........577766654332......32333334546555433.....3333......1455552.....1544.........
...........3333.........46775555434431....2332..33..57765422.................34531.....25553........
...........2332........357764543...332...2432........7765431..................343......15554432333..
...22.......11.........35554333.....212133333.........755532...................23.......55455422323.
..3331.................44533332......12323432..........5533..............33....33.......454555333323
..4332...........2.....35442111......32333331...........21..............2343...23.......335554323231
..4343..........331....5553..........3234443..................21......3355532..11.......234434332...
..3343.........5532.....532...........333553.................25333..232354553...........343433431...
..2333........354433....3333...........2253..................3554433234545454...........333443433...
..3432.......1333334531222231...12...........................4545343233554555...........4455555532..
..3433........224455553333322..2333.........12...............55555434225554553.........55534554453..
.33343....1.....355455422331...3554.......43532.............3554455551145545432.......7754343333322.
.32323...353.....5555433332....45542.....355453..........123455343453..776554321.....45753..2232321.
..333....5543.....34544423....235433333234555544........13334543..33...776677732....55544.......33..
........544332.....335533.....333434443345555453.........343534........777777773....5543............
.......545532323....4555......324333534343545555.........35443........3556677773.....33.............
.....455555323333...3554.......34544554323343453........255554........35555677442...................
....455455233354421245553......3355533233223343........1556555.........3445555555552................
...4555...1224555534454455......34544323222253.........35577554..........334345445551...............
..3554.....2343455535555553.....35554433433555..........4576454...........34345565553...............
..3555....133334434455544343331245552345543454...........43455...1........2445555545.......1........
...4333..232321...3344533323455555531.23343553............3454...........13355454553......33........
...232323332.......35334323435545542...13235532...........2553.........1245443445543......33........
...23432332........454232333344553433.......23233.....21..333.........2355455332333......454....33..
...35342221.......3333332234433343433........34333...1335..1.........125577532..........3333...3555.
...3533211.......345444333335444124552.......353223..22555...........33447543..........345432..2555.
...2322......323555453332..3533...355333....235433331114553..........3353433..........5775532..3545.
....12......33454545343.....323...5744433233454322233..2343....12....2233............45775331...353.
............23555533.........1....7775534355555311233...3332...321....21............34577442.....32.
............335434................477655455545543..11....231...131.................23334333......11.
.............3443................3457777454355543........121.......................2332323.......23.
..............33.............13343556777532345533........12...............3433....3221.133......133.
........1....................35544545677432345543........1...............345552213333...23......131.
.......332....................255556577532123332.................31.....3355553332323...333.........
.......232.....................3557677664324443................3353.....13...332345433122443........
.......131......2121.............5777657754533................34452...........32335554433353........
...............233233.............456567776554.............3555533.............3344555534543........
...............3323433......1321..3555457774553...........1354552...............223434554552........
................3334552.....3333...2553447554532321........23433................1334345555431.......
...................2433......121...23233345343433233........322.......122333....255534544553432.....
.....................21............13232133443232323........233.......33334323324455455435574455531.
...................................1231.......323231........333........3233332355545455334475555432.
.............1......................12.........11...........13...........2323235555343332355554434..
............331.............................................................23344433232...5545534...
............12.............................................................................5555.....


Which I think works quite well.

Author:  jonbwfc [ Mon Oct 10, 2011 10:46 am ]
Post subject:  Re: Cellular Automata FTMFW!

very nice. Would work really well with lego :lol: .

Author:  JJW009 [ Wed Oct 12, 2011 3:52 pm ]
Post subject:  Re: Cellular Automata FTMFW!

Talking of Lego, I wonder what the Minecraft landscape generator looks like...

Personally, I still love some of the Mandelbrot landscapes. There used to be a full colour hard back in a local book store when I was at college. I couldn't afford to buy it, but I'd visit it sometimes :lol:

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/