Draw a clock: Difference between revisions

→‎{{header|Nim}}: add graphical version using SDL
(→‎{{header|Nim}}: add graphical version using SDL)
Line 3,527:
 
=={{header|Nim}}==
==={{header|Text}}===
{{trans|Raku}}
<lang nim>import times, os
Line 3,542 ⟶ 3,543:
echo ""
sleep 1000</lang>
 
==={{header|Using SDL}}===
{{libheader|SDL2}}
<lang nim>## needs sdl2 ("nimble install sdl2")
 
import sdl2, times, math
 
let
size = [400, 400]
center = [size[0] div 2, size[1] div 2]
ra = 0.4 * float(size[0])
 
discard sdl2.init(INIT_EVERYTHING)
 
var
window: WindowPtr
render: RendererPtr
 
window = createWindow("studio", 100, 100, cint(size[0]), cint(size[1]), SDL_WINDOW_SHOWN)
render = createRenderer(window, -1, Renderer_Accelerated or
Renderer_PresentVsync or Renderer_TargetTexture)
 
var
evt = sdl2.defaultEvent
runGame = true
r: Rect
 
r.w = 6
r.h = 6
let rh = r.w div 2
 
while runGame:
let
n = now()
h = n.hour
m = n.minute
hm = float(h) + float(m) / 60
s = n.second
while pollEvent evt:
if evt.kind == QuitEvent:
runGame = false
break
render.setDrawColor(0, 0, 0)
render.clear
render.setDrawColor(255, 0, 0)
 
for i in 0..11:
r.x = cint(center[0] - rh + int(ra * sin(2.0 * PI * float(i) / 12.0)))
r.y = cint(center[1] - rh - int(ra * cos(2.0 * PI * float(i) / 12.0)))
render.fillRect(r)
for i in 0..s:
r.x = cint(center[0] - rh + int(0.9 * ra * sin(2.0 * PI * float(i) / 60.0)))
r.y = cint(center[1] - rh - int(0.9 * ra * cos(2.0 * PI * float(i) / 60.0)))
render.fillRect(r)
render.drawLine(cint(center[0]), cint(center[1]),
cint(center[0] + int(0.5 * ra * sin(2.0 * PI * float(hm) / 12.0))),
cint(center[1] - int(0.5 * ra * cos(2.0 * PI * float(hm) / 12.0))))
render.drawLine(cint(center[0]), cint(center[1]),
cint(center[0] + int(0.8 * ra * sin(2.0 * PI * float(m) / 60.0))),
cint(center[1] - int(0.8 * ra * cos(2.0 * PI * float(m) / 60.0))))
 
render.present()
delay(100)
 
destroy render
destroy window</lang>
 
=={{header|OCaml}}==
Anonymous user