Из точки внизу экрана вырастить линию от которой отделяться еще 2 линии, при этом первая должна продолжить расти и отелившиеся 2 линии тоже должны разветвиться на 2 линии и так же продолжить расти но чтобы за пределы экрана не вырастали- QBasic(Бейсик)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SCREEN 12
 CONST ML = 10000
 DIM x!(ML), y!(ML), xs!(ML), ys!(ML), Clr%(ML), St&
x!(1) = 320: y!(1) = 479: LA = 1
RANDOMIZE TIMER
xs!(1) = RND * 1 - .5: Clr%(1) = RND * 14 + 1: ys!(1) = -2
WHILE INKEY$ = ""
  IF f! <> TIMER THEN
    FOR i = 1 TO LA
     Ncx! = x!(i) + xs!(i): Ncy! = y!(i) + ys!(i)
     LINE (x!(i), y!(i))-(Ncx!, Ncy!), Clr%(i)
     x!(i) = Ncx!: y!(i) = Ncy!
    NEXT
    ' Разветвление линий
    IF St& > 10 AND LA < 512 THEN
     FOR i = 1 TO LA * 1
       x!(i + LA) = x!(i)
       xs!(i + LA) = RND * 6 - 3
       y!(i + LA) = y!(i)
       ys!(i + LA) = -2 - RND * 2
       Clr%(i + LA) = RND * 14 + 1
     NEXT: LA = LA * 2
    St& = 0
     LOCATE 1, 1: PRINT LA
    END IF
  f! = TIMER: St& = St& + 1
  END IF
WEND
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SCREEN 12
   CONST ML = 256
   DIM x!(ML), y!(ML), xs!(ML), ys!(ML), Clr%(ML), St&
  x!(1) = 320: y!(1) = 479: LA = 1
  RANDOMIZE TIMER
  xs!(1) = RND * 1 - .5: Clr%(1) = RND * 14 + 1: ys!(1) = -2
  WHILE INKEY$ = ""
    IF f! <> TIMER THEN
      FOR i = 1 TO LA
       Ncx! = x!(i) + xs!(i): Ncy! = y!(i) + ys!(i)
       LINE (x!(i), y!(i))-(Ncx!, Ncy!), Clr%(i)
       x!(i) = Ncx!: y!(i) = Ncy!
      NEXT
      ' Разветвление линий
      IF St& > 10 AND LA < 256 THEN
       FOR i = 1 TO LA * 1
         x!(i + LA) = x!(i)
         xs!(i + LA) = RND * 6 - 3
         y!(i + LA) = y!(i)
         ys!(i + LA) = -2 - RND * 2
         Clr%(i + LA) = RND * 14 + 1
       NEXT: LA = LA * 2
      St& = 0
       LOCATE 1, 1: PRINT LA
      END IF
    f! = TIMER: St& = St& + 1
    END IF
  WEND

Тестирование выполнено в программе QB64 ( Скачать )

Leave a Comment