NetLogo学习笔记2 —— 第一个程序
上一篇文章.我们了解了什么是NetLogo,以及它的下载安装,
这回我们将了解一个NetLogo模型的基本要素还有如何编写NetLogo模型
打开软件,按下图方式操作,创建一个setup按钮
setup按钮用于初始化模型状态,因为一开始模型什么都没有,我们必须去初始化它
如果你的setup按钮创建成功了,那么它应该是红色的,因为我们没有为按钮写代码!他是未定义的!
NetLogo的Hello World
进入“代码”标签页,输入以下代码
to setup ;;函数定义,setup按钮被按下就会执行这个函数
clear-all ;;清除世界,以免下一次初始化异常
create-turtles 100 ;;创造100只海龟
end ;;函数定义结束
你创建按钮时输入的setup,就是说这个按钮会执行setup函数,名称其实是无所谓的……
这是第一个语法点:(有参函数定义后面会讲)
to <函数名>
<函数体>
end
还有上面用到的两个函数clear-all和create-turtles
无参函数调用直接写函数名即可,有参函数调用在名字右边写参数并用空格分开,像上面的create-turtles 100
点击setup按钮,你会看到如下景象:
看过上一篇文章.,并尝试打开模型库的读者应该知道,海龟是种有位置,能移动的东西,比如狼和羊
那说好的“创建100只海龟”呢?为什么只有一个七彩斑斓小圆点?
因为海龟默认会被创建在原点上,100个海龟叠加在一起,看起来就像一个小圆点了
如何让它们不互相叠加呢?给它们都设定一个随机位置即可
发送请求 —— ask
在setup函数末尾添加如下代码
ask turtles [
setxy random-xcor random-ycor
]
加上之后,再点击setup,会发现100只海龟布满整个视图。
那么这段代码是如何工作的呢?为什么它可以设定海龟的随机位置呢?我们首先要明白坐标、集合和调用主体的概念
在Netlogo中,用坐标来表示对象的位置。对于二维空间,两个数就能表示出空间位置
坐标由两个数组成,第一个代表X坐标,第二个代表Y坐标
默认情况下,X向右为正方向;Y向上为正方向,原点在中心(如下图)
是不是很熟悉?有过初中数学基础的人都会知道,这就是我们初中学的平面直角坐标系
ask turtles [ ;;要求所有属于集合turtles的对象执行代码
setxy random-xcor random-ycor ;;设置海龟位置的函数setxy
]
集合是NetLogo中非常重要的概念,它是一些对象的总体,与数学上的集合一样,NetLogo的集合也是无序的
turtles表示全体海龟的集合,那属于turtles的对象自然是全体海龟了
要求所有属于集合turtles的对象执行代码。就是要求所有海龟执行代码,方括号是代码块
setxy是设置海龟对象位置的一个函数,它有两个参数
random-xcor、random-ycor都是无参函数,返回随机的X坐标、Y坐标
你可能会疑惑:
- 这段代码并没有指定哪个海龟执行命令,我们就写了个setxy,NetLogo怎么知道要谁去执行?
要明白这点,就要知道什么叫调用主体
当使用ask来请求集合中每个对象执行代码时,会进行以下操作
也就是说上面的代码调用的是被抽中海龟的setxy方法,虽然我们没写调用哪个对象的方法,但ask自动帮我们绑定了!·
那个被抽中的海龟,就叫调用主体
如果你直接在setup函数里写setxy,就会报错!因为Netlogo不知道调用谁的setxy
第二个语法点:
ask <被请求集合> [
<代码写在代块(方括号)内>
]
让模型动起来!—— 持续性按钮
现在我们的模型依旧十分无趣,因为它并不会运动……我们可以通过添加一个持续性按钮让模型能够动起来
在“代码”里创建一个名为go的函数(创建函数的语法见上面)
再在go函数里面添加如下代码:
to go
ask turtles [
fd 1 ;;海龟对象的移动方法
]
end
上面代码的意思不难看出:让所有海龟前进1步
如果你的代码没有任何问题,那么你会看到海龟漫天飞舞:
我们只写了一句 fd 1 为什么海龟会一直移动?因为go按钮是持续性的,它会不断地执行go函数,直到被按停
以上就是NetLogo模型的基本要素
- 一个调用setup函数的按钮用于初始化模型
- 一个调用go函数的按钮用于使模型持续运行
这篇文章就这里了,喜欢记得关注哦!会更新的!