Xmas tree

Richard Suchenwirth 2005-12-22 - Ho ho ho, here we go:

WikiDbImage xmas.jpg


package require Tk

proc every {ms body} {eval $body; after $ms [info level 0]}
proc lpick list {lindex $list [expr {int(rand()*[llength $list])}]}

proc Candle {id} {
    set Color [lpick {yellow linen white orange gold "light yellow" goldenrod}]
    .c itemconfig $id -fill $Color
    if {$Color != "yellow" } {after 16 Candle $id}
}
proc Flicker {} { Candle [lpick $::Selection] }

pack [canvas .c -width 200 -height 300 -background darkblue]
.c create rect 95 250 105 280 -fill brown
.c create rect 70 270 130 290 -fill black

foreach dx {40 55 70 85 100} y {20 60 100 140 180} {
    .c create poly 100 $y [expr 100-$dx] [expr $y+70] \
                          [expr 100+$dx] [expr $y+70] -fill darkgreen -tag Tree

    .c create rect [expr 108-$dx] [expr $y+45] \
                   [expr 112-$dx] [expr $y+65] -fill red    -tag Candle
    .c create oval [expr 107-$dx] [expr $y+36] \
                   [expr 113-$dx] [expr $y+44] -fill yellow -tag Flame

    .c create rect [expr  88+$dx] [expr $y+45] \
                   [expr  92+$dx] [expr $y+65] -fill red    -tag Candle
    .c create oval [expr  87+$dx] [expr $y+36] \
                   [expr  93+$dx] [expr $y+44] -fill yellow -tag Flame
}

wm title . "Xmas" 
set Selection [.c find withtag Flame]
every 200 { Flicker }

HJG Animated candles ! See also Design your own Christmas Tree