《Netlogo多主体建模入门》学习笔记(2)

第三章 通过“生命游戏”认识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。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值