Code Sketch


Christmas-Tree
By: Nitin Mishra
Category: Art
import java.awt.Paint
val cb = canvasBounds
val cbh = cb.height
val cbw = cb.width
val cbx = cb.x
val cby = cb.y
def mainTree(d: Int, s: Double) {
    if (d <= 0) {
        return
    }
    else {
        setPenColor(Color(0, 153, 0))
        setPenThickness(0.8)
        forward(s)
        mainTree(d - 1, s * .8)
        right(120)
        mainTree(d - 3, s * .6)
        right(120)
        mainTree(d - 3, s * .6)
        right(120)
        hop(-s)
    }
}
def star(size: Int, cPen: Color, cFill: Color) {
    setPenColor(cPen)
    setFillColor(cFill)
    repeat(5) {
        forward(size)
        right(144)
        forward(size)
        left(72)
    }
}
def tree(d: Int, s: Double, t: Double, h: Int) {
    mainTree(d, s)
    hop(s * 5)
    right(45)
    star(15, black, yellow)
    left(45)
    hop(-s * 5)
    setPenThickness(t)
    setPenColor(Color(0, 153, 0))
    back(h)
}
def rec(h: Int, w: Int) {
    repeat(2) {
        forward(h)
        right()
        forward(w)
        right()
    }
}
def ring(r: Int) {
    right(360, r)
}
def merry(c: Color) {
    setPenFont(Font("Jokerman", 70))
    setPenColor(c)
    repeatFor("Merry") { e =>
        write(e)
        hop(-60)
    }
}
def christmas(c: Color) {
    setPenFont(Font("Jokerman", 75))
    setPenColor(c)
    repeatFor("Christmas".toUpperCase()) { e =>
        write(e)
        right()
        hop(60)
        left()
    }
}

clear()
setSpeed(medium)
setBackground(white)
setPosition(cbx + cbw / 1.4, cby + cbh / 1.1)
//Gradients
val g1 = cm.radialGradient(cbx + cbw / 1.2, cby + cbh / 1.1,
    Color(255, 153, 153), 200, Color(255, 255, 255), false)
val g2 = cm.radialGradient(cbx, cbx * 2,
    Color(255, 0, 255), 200, purple, false)
val g3 = cm.linearGradient(cbx, cby, Color(153, 153, 255),
    cbx, cby + cbh, Color(255, 51, 255), false)
//First Circle
setPenColor(noColor)
setFillColor(g1)
ring(200)
setPosition(cbx * 2.98, cby + cbh / 2.1)
//Second Circle
setFillColor(Color(51, 0, 51))
ring(500)
setPosition(cbx * 3, cby + cbh / 2)
    //Third Circle
setFillColor(g3)
ring(500)
setPosition(cbx + cbw / 2, cby + cbh / 3)
setSpeed(fast)
//First Tree
tree(20, 60, 10, 50)
setPosition(cbx + cbw / 1.2, cby + cbh / 3)
//Second Tree
tree(18, 40, 10, 50)
setPosition(cbx + cbw / 9, cby + cbh / 1.2)
setSpeed(slow)
//Shadow of merry
merry(black)
setPosition(cbx + cbw / 9.1, cby + cbh / 1.21)
//Text Merry
merry(Color(255, 255, 0))
setPosition(cbx + cbw / 3.4, cby + cbh / 5.2)
//Text Chritsmas
christmas(purple)
invisible()