QB64.org Forum

Active Forums => Programs => Topic started by: Petr on May 30, 2020, 03:52:40 pm

Title: Very light alternative to PAINT
Post by: Petr on May 30, 2020, 03:52:40 pm
Hi,

 In the beginning was Cobalt. He had a problem with the program. I couldn't find a problem either. Then came BPlus. And there was light. BPlus showed a recursive function and I sat on my ass.

As soon as he showed it in this thread https://www.qb64.org/forum/index.php?topic=2645.msg118600#msg118600
so I remembered my coloring program. It forms so quickly with recursion! I tried an old condition that I had in the original program: Color borders do not have to be the same color. And it works!

Code: QB64: [Select]
  1. o = _NEWIMAGE(320, 240, 256)
  2.  
  3. FOR x = 160 TO 0 STEP -50
  4.     LINE (x, x)-(x + 50, x + 50), 255 * RND, BF
  5.     LINE (x, x)-(x - 50, x + 50), 255 * RND, B
  6.     LINE (160 - x, 120 - x)-(x + 50, x - 50), 255 * RND, BF
  7.     CIRCLE (160, 120), x, 255 * RND
  8.  
  9.     IF _MOUSEBUTTON(1) = -1 THEN
  10.         Colorize _MOUSEX, _MOUSEY, 14
  11.     END IF
  12.  
  13. SUB Colorize (x, y, newc)
  14.     c = POINT(x, y)
  15.     IF c = newc THEN EXIT SUB
  16.     Find x, y, c
  17.  
  18. SUB Find (x, y, c) 'c is background color, which is rewrited
  19.     IF POINT(x, y) = c THEN
  20.         PSET (x, y), 14
  21.         Xp = x + 1: IF Xp > _WIDTH THEN Xp = _WIDTH
  22.         Xm = x - 1: IF Xm < 0 THEN Xm = 0
  23.         Yp = y + 1: IF Yp > _HEIGHT THEN Yp = _HEIGHT
  24.         Ym = y - 1: IF Ym < 0 THEN Ym = 0
  25.         Find Xp, y, c
  26.         Find Xm, y, c
  27.         Find x, Yp, c
  28.         Find x, Ym, c
  29.     END IF
  30.  
Title: Re: Very light alternative to PAINT
Post by: Ashish on May 31, 2020, 10:06:01 am
Very nice use of recursion. :D
Title: Re: Very light alternative to PAINT
Post by: SierraKen on May 31, 2020, 03:37:38 pm
Wow I never knew this either! Am trying to study it but will have to kinda tear it apart to figure out what some of this means.
Also by the way, if you don't know already, you don't need 2 lines for your first 2 lines you have there, just 1. All you need is this:

Code: QB64: [Select]
  1. SCREEN _NEWIMAGE(320, 240, 256)