Microsoft Small Basic

Program Listing: NMD253
Window()

While 1 = 1
StartClock()
Program.Delay(1000)
EndWhile

Sub Window
GraphicsWindow.BackgroundColor = "Black"
Radius = 75

x = 1

GraphicsWindow.CanResize = "False"
gw = 600
gh = 700

GraphicsWindow.Width = gw
GraphicsWindow.Height = gh

GraphicsWindow.Top = 0
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.Title = "Analog Clock v1.0 By Kevin J"

gh = 450

MidX = gw/2
MidY = gh/2

GraphicsWindow.BrushColor = "SaddleBrown"
ClockBody = Shapes.AddRectangle(Radius * (Radius / (Radius / 4.5)), Radius * (Radius / 9.375))
Shapes.Move(ClockBody, MidX - Radius * 2.25, MidY - Radius * 2.25)

GraphicsWindow.BrushColor = "White"
PendulumBackGround = Shapes.AddRectangle(Radius * (Radius / (Radius / 4)), Radius * (Radius / 23.4375))
Shapes.Move(PendulumBackGround, MidX - Radius * 2, MidY + Radius * 2)

GraphicsWindow.BrushColor = "Goldenrod"
PendulumArm = Shapes.AddRectangle(Radius / 3.5, Radius * 4)
Shapes.Move(PendulumArm, MidX - Radius / 7, MidY)
Shapes.Rotate(PendulumArm, 35)
GraphicsWindow.PenWidth = 2
PendulumBall = Shapes.AddEllipse(Radius, Radius)
Shapes.Move(PendulumBall, MidX - Radius * 2 + 15, MidY + Radius * 3.5 - 10)

GraphicsWindow.BrushColor = "Peru"
Shapes.AddTriangle(MidX, MidY, MidX - Radius, MidY - Radius * 2, MidX + Radius, MidY - Radius * 2)
Shapes.AddTriangle(MidX, MidY, MidX - Radius , MidY - Radius * 2, MidX - Radius * 2, MidY - Radius * .875)
Shapes.AddTriangle(MidX, MidY, MidX + Radius, MidY - Radius * 2, MidX + Radius * 2, MidY - Radius * .875)
Shapes.AddTriangle(MidX, MidY, MidX - Radius, MidY + Radius * 2, MidX + Radius, MidY + Radius * 2)
Shapes.AddTriangle(MidX, MidY, MidX - Radius, MidY + Radius * 2, MidX - Radius * 2, MidY + Radius)
Shapes.AddTriangle(MidX, MidY, MidX + Radius, MidY + Radius * 2, MidX + Radius * 2, MidY + Radius)
Shapes.AddTriangle(MidX, MidY, MidX - Radius * 2, MidY - Radius * .875, MidX - Radius * 2, MidY + Radius)
Shapes.AddTriangle(MidX, MidY, MidX + Radius * 2, MidY - Radius * .875, MidX + Radius * 2, MidY + Radius)

GraphicsWindow.PenColor = "GoldenRod"
GraphicsWindow.BrushColor = "White"
GraphicsWindow.PenWidth = 10
GoldRim = Shapes.AddEllipse(Radius * 2 + 45, Radius * 2 + 45)
Shapes.Move(GoldRim, MidX - Radius - 22.5, MidY - Radius - 22.5)
GraphicsWindow.PenColor = "Gold"
GoldRim2 = Shapes.AddEllipse(Radius * 2 + 35, Radius * 2 + 35)
Shapes.Move(GoldRim2, MidX - Radius - 17.5, MidY - Radius - 17.5)

GraphicsWindow.PenColor = "Black"
GraphicsWindow.PenWidth = 2
HandCircle = Shapes.AddEllipse(Radius / 10, Radius / 10)
Shapes.Move(HandCircle, MidX - Radius / 20, MidY - Radius / 20)

For i = 1 To 60
GraphicsWindow.PenColor = "black"
GraphicsWindow.BrushColor = "black"
TickRadians = Math.GetRadians(-i * 6 + 90)
If Math.Remainder(i, 5) <> 0 Then
Tick[i] = Shapes.AddEllipse(Radius / 50, Radius / 50)
Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 1, MidY - Radius * Math.Sin(TickRadians) - 1)
Else
If i = 15 Then
Tick[i] = Shapes.AddEllipse(Radius / (13 * Math.Remainder(1, 3)),Radius / (13 * Math.Remainder(1, 3)))
Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 2.5, MidY - Radius * Math.Sin(TickRadians) - 3.5)
ElseIf i = 45 Then
Tick[i] = Shapes.AddEllipse(Radius / (13 * Math.Remainder(1, 3)), Radius / (13 * Math.Remainder(1, 3)))
Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 2.5, MidY - Radius * Math.Sin(TickRadians) - 3.5)
ElseIf i = 30 Then
Tick[i] = Shapes.AddEllipse(Radius / 10, Radius / 10)
Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 3.5 MidY - Radius * Math.Sin(TickRadians) - 5)
ElseIf i = 60 Then
Tick[i] = Shapes.AddEllipse(Radius / 10, Radius / 10)
Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 3.5, MidY - Radius * Math.Sin(TickRadians) - 5)
ElseIf i = 5 Or i = 10 Or i = 20 Or i = 25 Or i = 35 Or i = 40 Or i = 50 Or i = 55 Then
Tick[i] = Shapes.AddEllipse(Radius / 25, Radius / 25)
Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 1, MidY - Radius * Math.Sin(TickRadians) - 1)
EndIf
EndIf
EndFor
EndSub

Sub StartClock
If Clock.Minute = 0 And Clock.Second = 0 Then
Sound.PlayChime()
Else
Sound.PlayClick()
EndIf
If Clock.Hour + Clock.Minute/60 + Clock.Second/3600 <> Hour Then
Shapes.Remove(HourHand)
Hour = Clock.Hour + Clock.Minute/60 + Clock.Second/3600
GraphicsWindow.PenColor = "Black"
GraphicsWindow.PenWidth = 3
HourHand = Shapes.AddLine(MidX, MidY, MidX + Radius/ 2 * Math.Cos(Math.GetRadians(Hour * 30 - 90)), MidY + Radius / 2 * Math.Sin(Math.GetRadians(Hour * 30 - 90)))
EndIf
If Clock.Minute + Clock.Second/60 <> Minute Then
Shapes.Remove(MinuteHand)
Minute = Clock.Minute + Clock.Second/60
GraphicsWindow.PenColor = "Black"
GraphicsWindow.PenWidth = 2
MinuteHand = Shapes.AddLine(MidX, MidY, MidX + Radius/1.2 * Math.Cos(Math.GetRadians(Minute * 6 - 90)), MidY + Radius / 1.2 * Math.Sin(Math.GetRadians(Minute * 6 - 90)))
EndIf
If Clock.Second <> Second Then
Shapes.Remove(SecondHand)
Second = Clock.Second
GraphicsWindow.PenColor = "Black"
GraphicsWindow.PenWidth = 1
SecondHand = Shapes.AddLine(MidX, MidY, MidX + Radius * Math.Cos(Math.GetRadians(Second * 6 - 90)), MidY + Radius * Math.Sin(Math.GetRadians(Second * 6 - 90)))

If x = 2 Then
x = x - 1
Else
x = x + 1
EndIf

If x = 2 Then
Shapes.Rotate(PendulumArm, 35)
Shapes.Move(PendulumBall, MidX - Radius * 2 + 15, MidY + Radius * 3.5 - 10)
Else
Shapes.Rotate(PendulumArm, -35)
Shapes.Move(PendulumBall, MidX + Radius - 15, MidY + Radius * 3.5 - 10)
EndIf
EndIf
EndSub