Code Sketch
Christmas-Tree
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()