新浪博客

[转载]NetLogo模型讲解:元胞自动机(生命游戏)life game

2017-04-18 08:36阅读:

欢迎访问Netlogo专业中文社区:www.netlogo.club
本文档由netlogo爱好者编,如有不足,请见谅!
模型目录:Library-> Sample Models ->Computer Science ->Cellular Automata-> Life
模型原理:使用netlogo中瓦片实现生命游戏,生命游戏是元胞自动机中最基本的应用。

生命游戏原理:
1 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变)
2 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
3 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)。

原语
学习:
l neighbors
返回由8个相邻瓦片(邻元)或4个相邻瓦片(邻元)组成的主体集合
l random-float
如果number为正,返回大于等于0、小于number的一个随机浮点数。
如果number为负,返回小于等于0、大于number的一个随机浮点数。
如果number0,返回0

程序主界面:
[转载]NetLogo模型讲解:元胞自动机(生命游戏)life <wbr>game
;;瓦片拥有两个变量,一个是表明自己是不是活着的,一个是表明邻居中有多少个活着的
patches-own [
living? ;; indicates if the cell is living
live-neighbors ;; counts how many neighboring cells are alive
]

to setup-blank ;;设置初始状态,让所有元胞都为死的状态
clear-all
ask patches [ cell-death ];;设置所有元胞都为死的状态,cell-death 为下面定义的函数
reset-ticks
end

to setup-random ;;随机设置一些瓦片为死的状态,一些为活的状态
clear-all
ask patches
[ ifelse random-float 100.0 < initial-density ;;利用随机数来控制活着的元胞的密度
[ cell-birth ]
[ cell-death ] ]
reset-ticks
end

to cell-birth ;;设置瓦片为活,颜色为fgcolor,这个可以在界面里自己选择设定一种颜色
set living? true
set pcolor fgcolor
end

to cell-death ;;设置瓦片为死,颜色为bgcolor,这个可以在界面里自己选择设定一种颜色
set living? false
set pcolor bgcolor
end

to go
ask patches ;;先计算live-neighbors,就是计算每个瓦片邻居里活着的邻居个数
[ set live-neighbors count neighbors with [living?] ] ;;
ask patches
[ ifelse live-neighbors = 3 ;;如果活着的邻居个数等于3,自己的状态就改变为活着的状态,这里不管原先自己是什么状态,只考虑周围邻居的状态
[ cell-birth ]
[ if live-neighbors != 2 ;;如果活着的邻居个数不等于2,自己的状态就改变为死的状态
[ cell-death ] ] ]
tick
end

to draw-cells ;;这个主要实现一个界面交互,通过你的鼠标左键的点击,可以改变瓦片的状态
let erasing? [living?] of patch mouse-xcor mouse-ycor
while [mouse-down?]
[ ask patch mouse-xcor mouse-ycor
[ ifelse erasing?
[ cell-death ]
[ cell-birth ] ]
display ]
end




本文档由netlogo爱好者编,如有不足,请见谅!
需要项目合作的可以加我qq2763035721
或者有疑问加我 qq 群:530305942
如果你觉得对你有用,欢迎请分享者一杯咖啡!

[转载]NetLogo模型讲解:元胞自动机(生命游戏)life <wbr>game



我的更多文章

下载客户端阅读体验更佳

APP专享