複数タートルの並行動作のサンプル集3

(第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)

ここからダウンロードもできます)