第三章 通过“生命游戏”认识patch
代码实现:life of game
patches-own [ living ];;定义一个名为living的属性,意义为一个patch中周围的black patch的数量
to setup
clear-all
ask patches[
if random-float 1 < 0.3[;;random-float 随机选择0到1之间的数字,当小于0.3时生成白色方块
set pcolor white;;设置patches的颜色
]
set living 0 ;;更新每个patch的living状态
]
end
to go
ask patches[
set living count neighbors with [pcolor = black] ;;设置living为每一个patch周围黑色方格出现的数量
]
ask patches[
ifelse(pcolor = black)[;;使用了ifelse语句
if living > 3 or living < 2 [;;嵌套一层if语句
set pcolor white
]
][
if (living = 3)[;;ifelse外的一次if语句
set pcolor black
]
]
]
end
代码效果:
代码解析:
1.life of game生命游戏基于几个最基本的规则:
2.patches-own 为每一个patch自定义一个属性
语法:
patches-own [a,b,c,......] ;;其中中括号内为自定义的属性,即属性a,b,c等等。
FAO:patches-own一般写在程序的最开头部分
3.if语句
语法:
if 判断依据 [
]
FAO:
上述代码中
if random-float 1 < 0.3[;;random-float 随机选择0到1之间的数字,当小于0.3时生成白色方块
set pcolor white;;设置patches的颜色
]
“random-float 1”为生成一个0~1的随机数,然后在和0.3作比较。从而模拟出百分之三十的patches
变成白色方块
4.ifelse语句
语法:
ifelse 判断依据 [
expression1
][
expression2
]
FAO:该条件语句在C语言中等价于if-else语句
5.set living count neighbors with [pcolor = black]
emmm...这一句比较恶心,突出了logo语言和其他编程语言的不同之处。
这里的“count”英文上翻译为计数,“neighbors”为复数邻居,按照字面意思是计算当前每一个patch的邻居中为黑色(狗带)的数量。“count”和“neighbors”均为Netlogo的保留词。将该语句用括号分开变成set living = (count(neighbors with [pcolor = black]))这样就清晰许多。
按照字面意思,这里的“with”实际上是一个if语句
;;示例代码,运行不了哟
if [pcolor = black]
{
neighbor为black数量++
}
6.count 如5所说,count就是计数
语法:count x 这里x为计数的对象,可以在监视器中使用该语句用于监视x的数量
7.neighbors
emmmmm。。。这是一个保留字感觉就怪怪的,这里简单认为每个patch的邻居,即在一个九宫格内最中间的patch的邻居就是除他之外的其余patch。