Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Retta - RETTA.BAS

RETTA.BAS

Caricato da: Poggi Marco
Scarica il programma completo

  1. DECLARE SUB pausa (tempo AS DOUBLE)
  2. DECLARE SUB iniziaGruppo (reg() AS ANY)
  3. DECLARE SUB traccia (reg() AS ANY)
  4. DECLARE SUB successivo (reg() AS ANY)
  5. DECLARE SUB setColore (reg() AS ANY, colore AS INTEGER)
  6. DECLARE SUB inizia (r AS ANY)
  7. DECLARE SUB incrementa (r AS ANY)
  8. DECLARE SUB disegna (r AS ANY)
  9.  
  10. TYPE tpunto
  11.     x AS SINGLE
  12.     y AS SINGLE
  13.     dx AS SINGLE
  14.     dy AS SINGLE
  15. END TYPE
  16.  
  17. TYPE tsegmento
  18.     inizio AS tpunto
  19.     fine AS tpunto
  20. END TYPE
  21.  
  22. TYPE trettangolo
  23.     diagonale AS tsegmento
  24.     colore AS INTEGER
  25. END TYPE
  26.  
  27. SCREEN 12
  28. CLS
  29. RANDOMIZE (TIMER)
  30. DIM rettangolo(12) AS trettangolo
  31. DIM contatore AS LONG
  32. CALL iniziaGruppo(rettangolo())
  33. DO
  34.     CALL traccia(rettangolo())
  35.     CALL successivo(rettangolo())
  36.     contatore = contatore + 1
  37.     pausa .01
  38.     IF (contatore MOD 40&) = 0 THEN
  39.         CALL setColore(rettangolo(), 1 + 13 * RND)
  40.     END IF
  41. LOOP WHILE INKEY$ = ""
  42. REM PRINT "Sono stati disegnati "; contatore; " rettangoli"
  43.  
  44. SUB disegna (r AS trettangolo)
  45. LINE (r.diagonale.inizio.x, r.diagonale.inizio.y)-(r.diagonale.fine.x, r.diagonale.inizio.y), r.colore
  46. LINE (r.diagonale.fine.x, r.diagonale.inizio.y)-(r.diagonale.fine.x, r.diagonale.fine.y), r.colore
  47. LINE (r.diagonale.fine.x, r.diagonale.fine.y)-(r.diagonale.inizio.x, r.diagonale.fine.y), r.colore
  48. LINE (r.diagonale.inizio.x, r.diagonale.fine.y)-(r.diagonale.inizio.x, r.diagonale.inizio.y), r.colore
  49. END SUB
  50.  
  51. SUB incrementa (r AS trettangolo)
  52. IF r.diagonale.inizio.x < 6! THEN r.diagonale.inizio.dx = 3!
  53. IF r.diagonale.inizio.x > 634! THEN r.diagonale.inizio.dx = -3!
  54. IF r.diagonale.inizio.y < 6! THEN r.diagonale.inizio.dy = 3!
  55. IF r.diagonale.inizio.y > 474! THEN
  56.     r.diagonale.inizio.dy = -9!
  57. END IF
  58. IF r.diagonale.fine.x < 6! THEN r.diagonale.fine.dx = 3!
  59. IF r.diagonale.fine.x > 634! THEN r.diagonale.fine.dx = -3!
  60. IF r.diagonale.fine.y < 6! THEN r.diagonale.fine.dy = 3!
  61. IF r.diagonale.fine.y > 474! THEN r.diagonale.fine.dy = -3!
  62.  
  63. r.diagonale.inizio.x = r.diagonale.inizio.x + r.diagonale.inizio.dx
  64. r.diagonale.inizio.y = r.diagonale.inizio.y + r.diagonale.inizio.dy
  65. r.diagonale.fine.x = r.diagonale.fine.x + r.diagonale.fine.dx * RND
  66. r.diagonale.fine.y = r.diagonale.fine.y + r.diagonale.fine.dy * RND
  67. END SUB
  68.  
  69. SUB inizia (r AS trettangolo)
  70. r.diagonale.inizio.x = 40!
  71. r.diagonale.inizio.y = 40!
  72. r.diagonale.inizio.dx = 3!
  73. r.diagonale.inizio.dy = 3!
  74. r.diagonale.fine.x = 200!
  75. r.diagonale.fine.y = 150!
  76. r.diagonale.fine.dx = 3!
  77. r.diagonale.fine.dy = 3!
  78. END SUB
  79.  
  80. SUB iniziaGruppo (reg() AS trettangolo)
  81. STATIC fine AS INTEGER, i AS INTEGER
  82. fine = UBOUND(reg)
  83. i = 1
  84. CALL inizia(reg(0))
  85. WHILE i <= fine
  86.     reg(i) = reg(i - 1)
  87.     CALL incrementa(reg(i))
  88.     reg(i).colore = 3
  89.     i = i + 1
  90. WEND
  91. reg(0).colore = 0
  92. END SUB
  93.  
  94. SUB pausa (tempo AS DOUBLE)
  95. STATIC t0 AS DOUBLE
  96. t0 = TIMER
  97. DO
  98.  
  99. LOOP WHILE (TIMER - t0) < tempo
  100. END SUB
  101.  
  102. SUB setColore (reg() AS trettangolo, colore AS INTEGER)
  103. STATIC i AS INTEGER, fine AS INTEGER
  104. i = 1
  105. fine = UBOUND(reg)
  106. WHILE i <= fine
  107.     reg(i).colore = ABS(colore) MOD 16
  108.     i = i + 1
  109. WEND
  110. END SUB
  111.  
  112. SUB successivo (reg() AS trettangolo)
  113. STATIC fine AS INTEGER, i AS INTEGER
  114. fine = UBOUND(reg)
  115. i = 0
  116. WHILE i < fine
  117.     reg(i).diagonale = reg(i + 1).diagonale
  118.     i = i + 1
  119. WEND
  120. CALL incrementa(reg(fine))
  121. END SUB
  122.  
  123. SUB traccia (reg() AS trettangolo)
  124. STATIC i AS INTEGER, fine AS INTEGER
  125. i = 0
  126. fine = UBOUND(reg)
  127. WHILE i <= fine
  128.     disegna reg(i)
  129.     i = i + 1
  130. WEND
  131. END SUB