(第8回付録)
clear
for(i<-1 to 10) {
val t=newTurtle(i*40,0)
t.right(i*10)
runInBackground {
t.circle(100)
}
}
turtle0.circle(100)
(ここからダウンロードもできます)
def copy(t: Turtle) = { // 元の亀と同じ位置・同じ方向で分裂(増殖)
val p = t.position
val t1 = newTurtle(p.x, p.y)
t1.setHeading(t.heading)
t1
}
val fac = 0.8 // 枝分かれする毎に枝の長さがfac倍になる
val ang = 20 // 枝分かれの角度
def curY(len: Double, t: Turtle) {
t.forward(len)
if (len > 10) {
val t1 = copy(t) ; t1.right(ang)
runInBackground {
curY(len * fac, t1)
}
t.left(ang); curY(len * fac, t)
}
}
clear; curY(100, turtle0)
(ここからダウンロードもできます)
これまでに習っていない技術を使った記法
clear; turtle0.invisible; val sz = 50
Array((-2, 1, blue), (0, 1, black),(2, 1, red),
(-1, 0, yellow), (1, 0, green) ).foreach {
case (x, y, col) => {
runInBackground {
val t = newTurtle(x * sz, y * sz)
t.setPenColor(col) ; t.setPenThickness(6)
t.circle(sz*1.3)
}
}
}
(ここからダウンロードもできます)
上記と同じことを、これまでに習った記法で書くとこうなる
val sz = 50
def ring(x:Double, y:Double, col:Color) {
runInBackground {
val t = newTurtle(x * sz, y * sz)
t.setPenColor(col) ; t.setPenThickness(6)
t.circle(sz*1.3)
}
}
clear; turtle0.invisible
ring(-2, 1, blue)
ring(0, 1, black)
ring(2, 1, red)
ring(-1, 0, yellow)
ring(1, 0, green)
(ここからダウンロードもできます)