Reply to topic  [ 6 posts ] 
Cellular Automata FTMFW! 
Author Message
I haven't seen my friends in so long
User avatar

Joined: Thu Apr 23, 2009 7:35 pm
Posts: 6580
Location: Getting there
Reply with quote
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!

_________________
Oliver Foggin - iPhone Dev

JJW009 wrote:
The count will go up until they stop counting. That's the way counting works.


Doodle Sub!
Game Of Life

Image Image


Mon Oct 10, 2011 8:27 am
Profile WWW
What's a life?
User avatar

Joined: Thu Apr 23, 2009 7:26 pm
Posts: 17040
Reply with quote
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


Mon Oct 10, 2011 9:06 am
Profile
I haven't seen my friends in so long
User avatar

Joined: Thu Apr 23, 2009 7:35 pm
Posts: 6580
Location: Getting there
Reply with quote
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...

_________________
Oliver Foggin - iPhone Dev

JJW009 wrote:
The count will go up until they stop counting. That's the way counting works.


Doodle Sub!
Game Of Life

Image Image


Mon Oct 10, 2011 9:22 am
Profile WWW
I haven't seen my friends in so long
User avatar

Joined: Thu Apr 23, 2009 7:35 pm
Posts: 6580
Location: Getting there
Reply with quote
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.

_________________
Oliver Foggin - iPhone Dev

JJW009 wrote:
The count will go up until they stop counting. That's the way counting works.


Doodle Sub!
Game Of Life

Image Image


Mon Oct 10, 2011 9:49 am
Profile WWW
What's a life?
User avatar

Joined: Thu Apr 23, 2009 7:26 pm
Posts: 17040
Reply with quote
very nice. Would work really well with lego :lol: .


Mon Oct 10, 2011 10:46 am
Profile
I haven't seen my friends in so long
User avatar

Joined: Thu Apr 23, 2009 6:58 pm
Posts: 8767
Location: behind the sofa
Reply with quote
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:

_________________
jonbwfc's law: "In any forum thread someone will, no matter what the subject, mention Firefly."

When you're feeling too silly for x404, youRwired.net


Wed Oct 12, 2011 3:52 pm
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 6 posts ] 

Who is online

Users browsing this forum: No registered users and 9 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.