Draw a clock: Difference between revisions
Content added Content deleted
m (→{{header|Wren}}: Changed to Wren S/H) |
imported>Mparson (graphical analog clock in yabasic) |
||
Line 6,755: | Line 6,755: | ||
exit |
exit |
||
end if</syntaxhighlight> |
end if</syntaxhighlight> |
||
=={{header|Yabasic}} (graphical analog clock)== |
|||
<syntaxhighlight lang="yabasic"> |
|||
#!/usr/bin/yabasic |
|||
REM yaclock |
|||
DEG_PER_RAD = 57.257751 |
|||
winx = 480 |
|||
winy = 480 |
|||
radius = min(winx,winy) / 2 - 1 |
|||
hx = (winx/2) - 1 |
|||
hy = (winy/2) - 1 |
|||
REM length of the hands (90% of the radius of the clock face) |
|||
shand = int(radius * .9) |
|||
mhand = int(radius * .9) |
|||
hhand = int(radius * .5) |
|||
REM drop coords by one since graphics are 0 based |
|||
winx = winx - 1 |
|||
winy = winy - 1 |
|||
clear screen |
|||
open window winx,winy |
|||
clockface() |
|||
do |
|||
hour = val(mid$(time$,1,2)) |
|||
mins = val(mid$(time$,4,2)) |
|||
sec = val(mid$(time$,7,2)) |
|||
updatehand("sec") |
|||
updatehand("mins") |
|||
updatehand("hour") |
|||
pause .25 |
|||
loop |
|||
sub updatehand(hand$) |
|||
switch(hand$) |
|||
case "sec" |
|||
h_len = shand |
|||
angle = sec * 6 |
|||
width = 6 |
|||
color 255,0,0 |
|||
ox = osx |
|||
oy = osy |
|||
oxm1 = osxm1 |
|||
oxm2 = osxm2 |
|||
oym1 = osym1 |
|||
oym2 = osym2 |
|||
break |
|||
case "mins" |
|||
h_len = mhand |
|||
angle = mins * 6 + int(sec/10) |
|||
width = 12 |
|||
color 0,255,0 |
|||
ox = omx |
|||
oy = omy |
|||
oxm1 = omxm1 |
|||
oxm2 = omxm2 |
|||
oym1 = omym1 |
|||
oym2 = omym2 |
|||
break |
|||
case "hour" |
|||
h_len = hhand |
|||
angle = ((hour * 30) + (minutes / 12) * 6) + int(mins/2) |
|||
width = 15 |
|||
color 0,0,255 |
|||
ox = ohx |
|||
oy = ohy |
|||
oxm1 = ohxm1 |
|||
oxm2 = ohxm2 |
|||
oym1 = ohym1 |
|||
oym2 = ohym2 |
|||
break |
|||
end switch |
|||
h_angle1 = angle - width |
|||
if h_angle1 < 0 then |
|||
h_angle1 = h_angle1 + 360 |
|||
endif |
|||
h_angle1 = h_angle1 / DEG_PER_RAD |
|||
h_angle2 = angle + width |
|||
if h_angle2 > 360 then |
|||
h_angle2 = h_angle2 - 360 |
|||
endif |
|||
h_angle2 = h_angle2 / DEG_PER_RAD |
|||
angle = angle / DEG_PER_RAD |
|||
x = (hx + (sin(angle) * h_len)) |
|||
xm1 = (hx + (sin(h_angle1) * int(h_len * .2))) |
|||
xm2 = (hx + (sin(h_angle2) * int(h_len * .2))) |
|||
y = (hy - (cos(angle) * h_len)) |
|||
ym1 = (hy - (cos(h_angle1) * int(h_len * .2))) |
|||
ym2 = (hy - (cos(h_angle2) * int(h_len * .2))) |
|||
clear line hx,hy,oxm1,oym1 |
|||
clear line hx,hy,oxm2,oym2 |
|||
clear line oxm1,oym1,ox,oy |
|||
clear line oxm2,oym2,ox,oy |
|||
line hx,hy,xm1,ym1 |
|||
line hx,hy,xm2,ym2 |
|||
line xm1,ym1,x,y |
|||
line xm2,ym2,x,y |
|||
REM save off the old vals |
|||
switch(hand$) |
|||
case "sec" |
|||
osx = x |
|||
osy = y |
|||
osxm1 = xm1 |
|||
osxm2 = xm2 |
|||
osym1 = ym1 |
|||
osym2 = ym2 |
|||
break |
|||
case "mins" |
|||
omx = x |
|||
omy = y |
|||
omxm1 = xm1 |
|||
omxm2 = xm2 |
|||
omym1 = ym1 |
|||
omym2 = ym2 |
|||
break |
|||
case "hour" |
|||
ohx = x |
|||
ohy = y |
|||
ohxm1 = xm1 |
|||
ohxm2 = xm2 |
|||
ohym1 = ym1 |
|||
ohym2 = ym2 |
|||
break |
|||
end switch |
|||
end sub |
|||
sub clockface() |
|||
circle hx,hy,radius |
|||
htick = radius / 10 |
|||
mtick = htick / 2 |
|||
for z=0 to 360 step 6 |
|||
REM Begin at zero deg and stop before 360 deg |
|||
REM draw the hour markers |
|||
angle = z |
|||
angle = angle / DEG_PER_RAD |
|||
x2 = (hx + (sin(angle) * radius)) |
|||
y2 = (hy - (cos(angle) * radius)) |
|||
if mod(z,30) = 0 then |
|||
tick = htick |
|||
else |
|||
tick = mtick |
|||
endif |
|||
x3 = (hx + (sin(angle) * (radius - tick))) |
|||
y3 = (hy - (cos(angle) * (radius - tick))) |
|||
color 255,0,0 |
|||
line x2,y2,x3,y3 |
|||
color 0,0,0 |
|||
next z |
|||
end sub |
|||
</syntaxhighlight> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |