Draw a clock: Difference between revisions
Content deleted Content added
→{{header|AutoHotkey}}: AutoHotkey example added |
add Ruby |
||
Line 422: | Line 422: | ||
| ======== | | | | |
| ======== | | | | |
||
+----------+----------+----------+----------+</pre> |
+----------+----------+----------+----------+</pre> |
||
=={{header|Ruby}}== |
|||
{{libheader|Shoes}} |
|||
[[File:shoes_clock.png|thumb|Sample display of Ruby solution]] |
|||
<lang ruby>Shoes.app(:width=>205, :height => 228, :title => "A Clock") do |
|||
def draw_ray(width, start, stop, ratio) |
|||
angle = Math::PI * 2 * ratio - Math::PI/2 |
|||
strokewidth width |
|||
cos = Math::cos(angle) |
|||
sin = Math::sin(angle) |
|||
line 101+cos*start, 101+sin*start, 101+cos*stop, 101+sin*stop |
|||
end |
|||
def update |
|||
t = Time.now |
|||
@time.text = t.strftime("%H:%M:%S") |
|||
h, m, s = (t.hour % 12).to_f, t.min.to_f, t.sec.to_f |
|||
s += t.to_f - t.to_i # add the fractional seconds |
|||
@hands.clear do |
|||
draw_ray(3, 0, 70, (h + m/60)/12) |
|||
draw_ray(2, 0, 90, (m + s/60)/60) |
|||
draw_ray(1, 0, 95, s/60) |
|||
end |
|||
end |
|||
# a place for the text display |
|||
@time = para(:align=>"center", :family => "monospace") |
|||
# draw the clock face |
|||
stack(:width=>203, :height=>203) do |
|||
strokewidth 1 |
|||
fill gradient(deepskyblue, aqua) |
|||
oval 1, 1, 200 |
|||
fill black |
|||
oval 98, 98, 6 |
|||
# draw the minute indicators |
|||
0.upto(59) {|m| draw_ray(1, (m % 5 == 0 ? 96 : 98), 100, m.to_f/60)} |
|||
end.move(0,23) |
|||
# the drawing area for the hands |
|||
@hands = stack(:width=>203, :height=>203) {}.move(0,23) |
|||
animate(5) {update} |
|||
end</lang> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |