Update all new Tasks
This commit is contained in:
parent
00a190b0a6
commit
91df62d461
5697 changed files with 93386 additions and 804 deletions
41
Task/Draw-a-clock/Ruby/draw-a-clock-1.rb
Normal file
41
Task/Draw-a-clock/Ruby/draw-a-clock-1.rb
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
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
|
||||
45
Task/Draw-a-clock/Ruby/draw-a-clock-2.rb
Normal file
45
Task/Draw-a-clock/Ruby/draw-a-clock-2.rb
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
Shoes.app(:title => "Berlin-Uhr Clock", :width => 209, :height => 300) do
|
||||
background lightgrey
|
||||
|
||||
Red = rgb(255, 20, 20)
|
||||
Yellow = rgb(173, 255, 47)
|
||||
Green = rgb(154, 205, 50)
|
||||
Gray = rgb(128, 128, 128)
|
||||
|
||||
@time = para(:align => "center")
|
||||
stack do
|
||||
fill Gray
|
||||
stroke black
|
||||
strokewidth 2
|
||||
@seconds = oval 75, 3, 50
|
||||
@hrs_a = 4.times.collect {|i| rect 51*i, 56, 48, 30, 4}
|
||||
@hrs_b = 4.times.collect {|i| rect 51*i, 89, 48, 30, 4}
|
||||
@mins_a = 11.times.collect {|i| rect 2+18*i, 122, 15, 30, 4}
|
||||
@mins_b = 4.times.collect {|i| rect 51*i, 155, 48, 30, 4}
|
||||
# some decoration
|
||||
fill white
|
||||
stroke darkslategray
|
||||
rect -10, -30, 75, 70, 10
|
||||
rect 140, -30, 75, 70, 10
|
||||
rect -13, 192, 105, 100, 10
|
||||
rect 110, 192, 105, 100, 10
|
||||
end.move(3,20)
|
||||
|
||||
animate(1) do
|
||||
now = Time.now
|
||||
@time.text = now.strftime("%H:%M:%S")
|
||||
@seconds.style(:fill => now.sec.even? ? Green : Gray)
|
||||
a, b = now.hour.divmod(5)
|
||||
4.times {|i| @hrs_a[i].style(:fill => i < a ? Red : Gray)}
|
||||
4.times {|i| @hrs_b[i].style(:fill => i < b ? Red : Gray)}
|
||||
a, b = now.min.divmod(5)
|
||||
11.times {|i| @mins_a[i].style(:fill => i < a ? (i%3==2 ? Red : Yellow) : Gray)}
|
||||
4.times {|i| @mins_b[i].style(:fill => i < b ? Yellow : Gray)}
|
||||
end
|
||||
|
||||
keypress do |key|
|
||||
case key
|
||||
when :control_q, "\x11" then exit
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue