Advertisement
nasarouf

phd_dedication.bas

Jun 8th, 2018
1,116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 6.04 KB | None | 0 0
  1. '
  2. ' Nasa Rouf nasarouf@gmail.com
  3. ' generates the dedication graphics for the PhD thesis
  4. ' http://www.cs.ubc.ca/~nasarouf/rouf_2018_computational.pdf
  5. '
  6. '
  7.  
  8. DECLARE SUB printme (row!, s$)
  9. DECLARE SUB printNames (px() AS INTEGER, h!, w!, skip!)
  10. DECLARE SUB colorz ()
  11. DECLARE FUNCTION rz! ()
  12. DECLARE SUB cap (px() AS INTEGER, r!, h!, w!, skip!)
  13. DECLARE SUB drawNames (px() AS INTEGER, h!, w!, r!, c!, subs!)
  14. DECLARE SUB boxz (bx!())
  15.  
  16. SCREEN 12
  17.  
  18. 'darkening mask
  19. CLS
  20. DIM bx(100)
  21. LINE (0, 0)-(9, 9), 7, BF
  22. GET (0, 0)-(9, 9), bx
  23. CLS
  24.  
  25. 'buffer for names
  26. skip = 1
  27. h = INT(5 * (16 / skip))
  28. w = INT(6 * 5 * 8 / skip)
  29. DIM px(4 * h, w / 8) AS INTEGER
  30.  
  31. 'capture names
  32. printNames px(), h, w, skip
  33. CLS
  34.  
  35. 'colorful animation; press any key to select and move to the next
  36. colorz
  37.  
  38.  
  39. boxz bx()
  40. drawNames px(), 4 * h, w, 240 - 2 * h + 36, 320 - w / 2, h
  41.  
  42. COLOR 7
  43. END
  44.  
  45. SUB boxz (bx())
  46. w = 90
  47.         'FOR x = w TO 640 - x
  48.         '        FOR y = w TO 480 - w
  49.         '                PSET (x, y), (POINT(x, y) AND 7)
  50.         '        NEXT
  51.         'NEXT
  52.         FOR x = w TO 640 - w - 1 STEP 10
  53.             FOR y = w TO 480 - w - 1 STEP 10
  54.                 PUT (x, y), bx, AND
  55.             NEXT
  56.         NEXT
  57.         FOR t = 0 TO 20 STEP 4
  58.                 LINE (w + t, w + t)-(640 - w - t, 480 - w - t), 7, B
  59.         NEXT
  60. END SUB
  61.  
  62. SUB cap (px() AS INTEGER, r, h, w, skip)
  63.         FOR i = 0 TO h - 1
  64.                 k = 0
  65.                 v = 0
  66.                 FOR j = 0 TO w - 1
  67.                         vv = POINT(j * skip, i * skip)
  68.                         IF vv > 0 THEN vv = 1
  69.                         v = v * 2 + vv
  70.                         k = k + 1
  71.                         IF k = 8 THEN
  72.                                 k = 0
  73.                                 px(r + i, j / 8) = v
  74.                                 v = 0
  75.                         END IF
  76.  
  77.                 NEXT
  78.         NEXT
  79. END SUB
  80.  
  81. SUB colorz
  82.  
  83. cn = 5
  84. DIM c(5)
  85. c(0) = 9
  86. c(1) = 11
  87. c(2) = 10
  88. c(3) = 14
  89. c(4) = 12
  90. c(5) = 0
  91.  
  92. n = cn * 100 + 1
  93. DIM x1(n), y1(n), x2(n), y2(n)
  94. dx1 = rz
  95. dy1 = rz
  96. dx2 = rz
  97. dy2 = rz
  98.  
  99. FOR i = 0 TO 100
  100.         x1(i) = 0
  101.         x2(i) = 0
  102.         y1(i) = 0
  103.         y2(i) = 0
  104. NEXT
  105.  
  106.                        
  107. FOR i = 1 TO 50000
  108. '        PRINT i                
  109.         IF INKEY$ <> "" THEN EXIT FOR
  110.  
  111.         k = i MOD n
  112.         k1 = (i - 1) MOD n
  113.        
  114.         x1(k) = x1(k1) + dx1
  115.         IF x1(k) >= 640 OR x1(k) <= 1 THEN
  116.                 x1(k) = x1(k1)
  117.                 dx1 = -SGN(dx1) * rz
  118.         END IF
  119.        
  120.         y1(k) = y1(k1) + dy1
  121.         IF y1(k) >= 480 OR y1(k) <= 1 THEN
  122.                 y1(k) = y1(k1)
  123.                 dy1 = -SGN(dy1) * rz
  124.         END IF
  125.        
  126.         x2(k) = x2(k1) + dx2
  127.         IF x2(k) >= 640 OR x2(k) <= 1 THEN
  128.                 x2(k) = x2(k1)
  129.                 dx2 = -SGN(dx2) * rz
  130.         END IF
  131.        
  132.         y2(k) = y2(k1) + dy2
  133.         IF y2(k) >= 480 OR y2(k) <= 1 THEN
  134.                 y2(k) = y2(k1)
  135.                 dy2 = -SGN(dy2) * rz
  136.         END IF
  137.        
  138.         FOR cc = 0 TO cn
  139.                 IF i > cc * 100 THEN
  140.                         kk = (i - cc * 100) MOD n
  141.                         LINE (x1(kk), y1(kk))-(x2(kk), y2(kk)), c(cc)
  142.                 END IF
  143.         NEXT
  144. NEXT
  145. END SUB
  146.  
  147. SUB drawNames (px() AS INTEGER, h, w, r, c, subs)
  148.         ii = 0
  149.         dif = 0
  150.         rate = 8
  151.         ita = subs / rate
  152.         FOR i = 0 TO h - 1
  153.                 IF i MOD subs = 0 THEN
  154.                         IF dif = 0 THEN dif = (i - ii) / 2
  155.                         ii = ii + dif
  156.                         ita = subs / rate
  157.                 ELSE
  158.                         ita = ita - 1! / rate
  159.                 END IF
  160.                        
  161.                 k = 128
  162.                 sm = 0
  163.                 FOR j = 0 TO w / 8 - 1
  164.                         sm = sm + px(i, j)
  165.                 NEXT
  166.                 IF (sm = 0) THEN GOTO skipdrawing
  167.                 FOR j = 0 TO w - 1
  168.                         IF INT(px(i, INT(j / 8)) / k) MOD 2 > 0 THEN
  169.                                 PSET (INT(j + c + ita), ii + r), 15
  170.                         'ELSE
  171.                         '        PSET (j, i), 8
  172.                         END IF
  173.                         k = INT(k / 2)
  174.                         IF k = 0 THEN k = 128
  175.                 NEXT
  176.                 ii = ii + 1
  177. skipdrawing:
  178.        
  179.         NEXT
  180. END SUB
  181.  
  182. SUB printme (row, s$)
  183.         row = row + 1
  184.         col = 1
  185.         'WHILE LEN(s$) > 0 AND LEFT$(s$, 1) = " "
  186.         '        col = col + 1
  187.         '        s$ = RIGHT$(s$, LEN(s$) - 1)
  188.         'WEND
  189.         'PRINT row
  190.         IF (col > 0) THEN LOCATE row, col
  191.         PRINT s$
  192. END SUB
  193.  
  194. SUB printNames (px() AS INTEGER, h, w, skip)
  195.  
  196. row = 0
  197. prefix$ = ""
  198.  
  199. printme row, prefix$ + "  A   M   M M   M U   U"
  200. printme row, prefix$ + " A A  MM MM MM MM U   U"
  201. printme row, prefix$ + "A   A M M M M M M U   U"
  202. printme row, prefix$ + "AAAAA M   M M   M U   U"
  203. printme row, prefix$ + "A   A M   M M   M  UUU"
  204. printme row, ""
  205. cap px(), 0, h, w, skip
  206. row = 0
  207. printme row, prefix$ + "  A   BBBB  BBBB  U   U"
  208. printme row, prefix$ + " A A  B   B B   B U   U"
  209. printme row, prefix$ + "A   A BBBB  BBBB  U   U"
  210. printme row, prefix$ + "AAAAA B   B B   B U   U"
  211. printme row, prefix$ + "A   A BBBB  BBBB   UUU"
  212. printme row, ""
  213. cap px(), h, h, w, skip
  214. row = 0
  215. printme row, prefix$ + "  A   L      III   CCC  EEEEE"
  216. printme row, prefix$ + " A A  L       I   C     E"
  217. printme row, prefix$ + "A   A L       I   C     EEE"
  218. printme row, prefix$ + "AAAAA L       I   C     E"
  219. printme row, prefix$ + "A   A LLLLL  III   CCCC EEEEE"
  220. printme row, ""
  221. cap px(), h * 2, h, w, skip
  222. row = 0
  223. printme row, prefix$ + "N   N   A   FFFFF  III        "
  224. printme row, prefix$ + "NN  N  A A  F       I          "
  225. printme row, prefix$ + "N N N A   A FFF     I          "
  226. printme row, prefix$ + "N  NN AAAAA F       I           "
  227. printme row, prefix$ + "N   N A   A F      III         "
  228. printme row, ""
  229. cap px(), h * 3, h, w, skip
  230. row = 0
  231.  
  232. END SUB
  233.  
  234. FUNCTION rz
  235.         rz = RND * 5 + 1
  236. END FUNCTION
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement