QB64.org Forum

Active Forums => Programs => Topic started by: Richard Frost on February 26, 2020, 08:24:41 pm

Title: Navy Time
Post by: Richard Frost on February 26, 2020, 08:24:41 pm
Yarrr.  Ahoy.  A clock for Captain Fishsticks.

Code: QB64: [Select]
  1. _TITLE "Navy Time"
  2. $EXEICON:'boat2.ico'
  3.  
  4. DEFINT A-Z
  5. DIM a(11, 1)
  6. SCREEN 12 '                                           640*480*16
  7. FOR i = 1 TO 11: READ t$, a(i, 0), a(i, 1): NEXT i '  angles
  8. q = 41: q2 = 16
  9. man = 1: w$ = SPACE$(6)
  10.  
  11. begin:
  12. t$ = TIME$
  13. MID$(t$, 3) = " ": MID$(t$, 6) = " " '                no colons in military time
  14. t2$ = t$
  15. LOCATE 28, 37: PRINT t$;
  16. t$ = MID$(t$, 1, 2) + MID$(t$, 4, 2) + MID$(t$, 7, 2)
  17. FOR i = 6 TO 1 STEP -1
  18.     c$ = MID$(t$, i, 1): lc$ = MID$(w$, i, 1)
  19.     IF c$ = lc$ THEN EXIT FOR '                       unchanged digit
  20.     dx = INSTR("1234567890", c$) - (c$ = "0")
  21.     IF ctype = 0 THEN
  22.         x1 = 60 + (i - 1) * 104: y1 = 200
  23.         LINE (x1 - 52, 150)-(x1 + 52, 250), 0, BF
  24.     ELSE
  25.         x1 = 230 + ((i - 1) MOD 2) * 160
  26.         y1 = 80 + ((i - 1) \ 2) * 140
  27.         LINE (x1 - 80, y1 - 60)-(x1 + 80, y1 + 60), 0, BF
  28.     END IF
  29.     FOR j = 0 TO 1
  30.         de = a(dx, j) - 90 '                          degrees
  31.         IF man THEN
  32.             CIRCLE (x1, y1 - 6), 4, 15
  33.             LINE (x1 - 6, y1)-(x1 + 6, y1 + 20), 15, B
  34.         END IF
  35.         x2 = x1 + (j - .5) * (20 - (ctype = 1) * 20)
  36.         x3 = x2 + q * COS(_D2R(de))
  37.         y2 = y1 + q * SIN(_D2R(de))
  38.         LINE (x2, y1)-(x3, y2), 15 '                  arms
  39.         IF j = 0 THEN s = 1 ELSE s = -1
  40.         IF (j = 1) AND (INSTR("89", c$)) THEN s = -s
  41.         FOR a = 1 TO 3 '                              flags
  42.             de = de - 90 * s
  43.             x4 = x3 + q2 * COS(_D2R(de))
  44.             y4 = y2 + q2 * SIN(_D2R(de))
  45.             LINE -(x4, y4), 15
  46.             IF a = 1 THEN '                           save for diagonal
  47.                 sx = x4: sy = y4
  48.                 td = de - 45 * s
  49.                 rx = x3 + (q2 \ 2) * COS(_D2R(td)) '  to paint red
  50.                 ry = y2 + (q2 \ 2) * SIN(_D2R(td))
  51.             END IF
  52.             IF a = 3 THEN
  53.                 td = de - 45 * s
  54.                 yx = x3 + (q2 \ 2) * COS(_D2R(td)) '  to paint yellow
  55.                 yy = y2 + (q2 \ 2) * SIN(_D2R(td))
  56.             END IF
  57.             x3 = x4: y2 = y4
  58.         NEXT a
  59.         LINE -(sx, sy), 15 '                          diagonal
  60.         PAINT (rx, ry), 4, 15 '                       red
  61.         PAINT (yx, yy), 14, 15 '                      yellow
  62.     NEXT j
  63. w$ = t$ '                                             was
  64.     i$ = INKEY$
  65.     IF LEN(i$) THEN
  66.         IF INSTR(CHR$(13) + " bm", i$) THEN man = 1 - man: w$ = SPACE$(6)
  67.         IF i$ = "t" THEN '                            3 rows of 2
  68.             ctype = ctype XOR 1
  69.             IF ctype = 0 THEN
  70.                 q = 41: q2 = 16
  71.             ELSE
  72.                 q = 58: q2 = 24
  73.             END IF
  74.             CLS: w$ = SPACE$(6)
  75.         END IF
  76.         IF i$ = CHR$(27) THEN END '                   Esc to quit
  77.     END IF
  78. GOTO begin
  79.  
  80. DATA 1,225,180,2,270,180,3,315,180,4,0,180,5,180,45,6,180,90
  81. DATA 7,180,135,8,270,225,9,225,315,j,0,90,0,225,0
  82.  
Title: Re: Navy Time
Post by: bplus on February 26, 2020, 08:56:13 pm
reply message:
 


Hey but yours are hand drawn, very cool!
Title: Re: Navy Time with Date
Post by: Richard Frost on February 26, 2020, 09:16:21 pm
Since someone asked for a version with a date, here she be.

Yarrr.  The format B+ came up with is much prettier.  I will consult a genetic enginner,
get me some graphics designer genes.

Code: QB64: [Select]
  1. _TITLE "Navy Time" '                                  with date
  2. $EXEICON:'boat2.ico'
  3.  
  4. DEFINT A-Z
  5. DIM a(11, 1)
  6. SCREEN 12 '                                           640*480*16
  7. FOR i = 1 TO 11: READ t$, a(i, 0), a(i, 1): NEXT i '  angles
  8. q = 28: q2 = 14
  9. man = 1: w$ = SPACE$(6)
  10.  
  11. begin:
  12. FOR pass = 0 TO 1
  13.     IF pass THEN t$ = TIME$ ELSE t$ = DATE$
  14.     t$ = LEFT$(t$, 2) + MID$(t$, 4, 2) + MID$(t$, 7, 4 - pass * 2)
  15.     LOCATE 26 + pass * 2, 40 - LEN(t$) \ 2: PRINT t$;
  16.     FOR i = 1 TO LEN(t$)
  17.         c$ = MID$(t$, i, 1)
  18.         dx = INSTR("1234567890", c$) - (c$ = "0")
  19.         x1 = 40 + (i - 1) * 80 + pass * 72
  20.         y1 = 160 + pass * 120
  21.         FOR j = 0 TO 1
  22.             de = a(dx, j) - 90 '                          degrees
  23.             IF man THEN
  24.                 CIRCLE (x1, y1 - 6), 4, 7
  25.                 LINE (x1 - 3, y1)-(x1 + 3, y1 + 20), 7, B
  26.             END IF
  27.             x2 = x1 + (j - .5) * 20
  28.             x3 = x2 + q * COS(_D2R(de))
  29.             y2 = y1 + q * SIN(_D2R(de))
  30.             LINE (x2, y1)-(x3, y2), 15 '                  arms
  31.             IF j = 0 THEN s = 1 ELSE s = -1
  32.             IF (j = 1) AND (INSTR("89", c$)) THEN s = -s
  33.             FOR a = 1 TO 3 '                              flags
  34.                 de = de - 90 * s
  35.                 x4 = x3 + q2 * COS(_D2R(de))
  36.                 y4 = y2 + q2 * SIN(_D2R(de))
  37.                 LINE -(x4, y4), 15
  38.                 IF a = 1 THEN '                           save for diagonal
  39.                     sx = x4: sy = y4
  40.                     td = de - 45 * s
  41.                     rx = x3 + (q2 \ 2) * COS(_D2R(td)) '  to paint red
  42.                     ry = y2 + (q2 \ 2) * SIN(_D2R(td))
  43.                 END IF
  44.                 IF a = 3 THEN
  45.                     td = de - 45 * s
  46.                     yx = x3 + (q2 \ 2) * COS(_D2R(td)) '  to paint yellow
  47.                     yy = y2 + (q2 \ 2) * SIN(_D2R(td))
  48.                 END IF
  49.                 x3 = x4: y2 = y4
  50.             NEXT a
  51.             LINE -(sx, sy), 15 '                          diagonal
  52.             PAINT (rx, ry), 4, 15 '                       red
  53.             PAINT (yx, yy), 14, 15 '                      yellow
  54.         NEXT j
  55.     NEXT i
  56. NEXT pass
  57.  
  58.  
  59. t$ = TIME$
  60.     i$ = INKEY$
  61.     IF LEN(i$) THEN
  62.         IF INSTR(CHR$(13) + " bm", i$) THEN man = 1 - man: w$ = SPACE$(6)
  63.         IF i$ = CHR$(27) THEN END '                   Esc to quit
  64.     END IF
  65. GOTO begin
  66.  
  67. DATA 1,225,180,2,270,180,3,315,180,4,0,180,5,180,45,6,180,90
  68. DATA 7,180,135,8,270,225,9,225,315,j,0,90,0,225,0
  69.  
Title: Re: Navy Time
Post by: bplus on February 26, 2020, 09:19:03 pm
B+ just modified [banned user]'s code and images, thanks [banned user]!
Title: Re: Navy Time
Post by: bplus on February 27, 2020, 11:04:25 am
Have you guys considered putting a space between digits or flag a space signal as Date and Time are normally formatted?
Title: Re: Navy Time
Post by: Richard Frost on February 27, 2020, 11:14:32 am
Nice change, [banned user], but a primary responsibility of a signalman is to smack himself in the nose. 

Spaces between digits would necessitate smaller critters, and I'll have to put on my glasses.  The
original version does have the option to tell time with 3 rows of 2 characters each - "t".

T.  T is for turtle.  - Officer Barbrady, Southpark, on seeing Cartman crucified
Title: Re: Navy Time
Post by: Richard Frost on February 27, 2020, 11:18:28 am
Wut?