不少人小时候玩过跳房子(Hopscotch)的游戏,在给定的一些格子里跳来跳去,这些格子就是你在游戏时的空间,由有限个位置构成。
跳房子能玩的花样不多,但如果格子增加,规则多一些,就可能会形成非常复杂,能把CPU干到冒烟的游戏。
比如国际象棋。
用国际象棋的棋盘来理解NetLogo的Patches,应该算是比较通俗易懂的了。棋盘这个有一定大小的矩形,就是棋子们的活动空间,是棋子们的世界。
棋子们的世界不只大小有限,还被划分为一个个的小方块,因此,总的个数也是有限的——棋子能站的位置,不多!
把海龟(turtles)的活动空间限定在有限的范围,并且划分成格子,称为世界。构成世界的每一个格子,称为嵌块,也就是patch;复数形式patches则表示嵌块集。
在NetLogo中,海龟的移动,只能是从一个嵌块到另一个嵌块。
patches也是一种自主体,但和能够四处活动的turtles有显著差异,patches本身是不可移动的,每个嵌块都有固定的位置。
每一个嵌块都可以有一个pcolor属性,表示嵌块的颜色;同时还可以根据需要定义自己的其它属性,比如如果你要模拟一个牧场,则嵌块可以定义草量(grass-amount)这样的属性。
需要注意,patch的颜色属性叫做pcolor,而海龟的颜色属性叫做color,这是NetLogo预定义的,要明确区分。
比如下面的代码将世界里的所有嵌块都改为嫩绿。
ask patches [ set pcolor green + 2] #整个patches集合都改成嫩绿
单独修改某一个嵌块的颜色,也是可以的:
ask patch 0 0 [ set pcolor blue #把原点所对应的那个嵌块的颜色改为蓝色
然后再创建10只羊:
to setup
clear-all
ask patches [ set pcolor green + 2] #整个patches集合都改成嫩绿
ask patch 0 0 [set pcolor blue] #把原点所对应的那个嵌块的颜色改为蓝色
crt 10 [ set shape "sheep"
setxy random-xcor random-ycor
] #创建10个turtle,形状为绵羊,位置和颜色随机
end