아날로그 시계
analog-clock.bas
설명
640×480 화면에 색 점 19800개를 뿌린 뒤 원 두 개로 시계판을 그립니다.
눈금과 바늘은 모두 DRAW "bm360,250 ta각도 u길이"처럼 회전 각도를 바꿔 가며 그립니다.
- 바늘은
c0(검정)으로 그렸다가TIME$가 바뀌면c15(흰색)로 다시 그립니다. - 분침은 초를 반영해 조금씩 움직입니다.
- 시침은 시와 분으로 계산한 각도
d를 쓰지 않고 시 값c를 그대로 각도로 씁니다.
그래서 시침이 12시 근처에서 거의 움직이지 않습니다. E를 누르면 끝납니다.
소스
SCREEN 12CLSFOR i = 1 TO 19800PSET (INT(RND(1) * 640), INT(RND(1) * 480)), INT(RND(1) * 16)NEXT iCIRCLE (360, 250), 220CIRCLE (360, 250), 200FOR i = 0 TO 360 STEP 6DRAW "c0 BM360,250 TA" + STR$(i) + " BU120 u5"IF i = 0 OR i / 30 = INT(i / 30) THENDRAW "c0 bm360,250 ta" + STR$(i) + "bu110 u10"END IFNEXT iDOa = VAL(MID$(TIME$, 7, 2)) * 6 * -1b = INT(VAL(MID$(TIME$, 4, 2)) * 6 + VAL(MID$(TIME$, 7, 2)) / 10) * -1c = VAL(MID$(TIME$, 1, 2)) * -1IF c > 12 THEN c = c - 12d = INT(c * 30 + b / 10)DRAW "c0 bm360,250 ta" + STR$(a) + "u100"DRAW "c0 bm360,250 ta" + STR$(b) + "u120 "DRAW "c0 bm360,250 ta" + STR$(c) + "u70"a1$ = INKEY$IF a1$ = "e" OR a1$ = "E" THEN ENDa$ = TIME$DO WHILE a$ = TIME$LOOPDRAW "c15 bm360,250 ta" + STR$(a) + "u100"DRAW "c15 bm360,250 ta" + STR$(b) + "u120"DRAW "c15 bm360,250 ta" + STR$(c) + "u70"LOOPSCREEN 0