_TITLE "Snapping to a Grid, press any for next grid" ' b+ 2020-09-17 so much better in living color!! ' ah much better response on on escape or Q to quit! too.
'_SCREENMOVE _MIDDLE
'test drawGrid
'drawGrid 0, 0, _WIDTH - 1, _HEIGHT - 1, 50, &HFFFFFF00 'crap don't forget screen width and height start at 0
'LINE (0 + 1, 0 + 1)-(_WIDTH - 1, _HEIGHT - 1), &HFF0000FF, B
'SLEEP
'DO
' CLS
' x1 = RND * (_WIDTH - 200): y1 = RND * (_HEIGHT - 200)
' x2 = x1 + (_WIDTH - 1 - x1) * RND: y2 = y1 + RND * (_HEIGHT - 1 - y1)
' LINE (x1 + 1, y1 + 1)-(x2 - 1, y2 - 1), &HFF0000FF, B
' PRINT x1, y1, x2, y2
' drawGrid x1, y1, x2, y2, 50, &HFFFFFF00
' SLEEP
'LOOP
'END
'whole new set
gSize
= units
(INT(40 * RND) + 11, 5) IF nBoxes
< 15 THEN nBoxes
= 15 IF nBoxes
> 100 THEN nBoxes
= 100 COLOR &HFFFFFFFF, &HFF000000 tryAgain:
b
(i
).x
= units
(RND * (_WIDTH - 2 * (gSize
+ 1)) + gSize
+ 1, gSize
) 'get x, y off the edges of screen! b
(i
).y
= units
(RND * (_HEIGHT - 2 * (gSize
+ 1)) + gSize
+ 1, gSize
) OK = -1
b
(i
).w
= gSize
+ RND * gSize
* .5 b
(i
).h
= gSize
+ RND * gSize
* .5 hc = maxC(backColor)
drawGrid gSize
, gSize
, _WIDTH - 1, _HEIGHT - 1, gSize
, &HFF404040 'SLEEP
FOR i
= 2 TO nBoxes
' draw the meanderings meander2 b(i - 1).x, b(i - 1).y, b(i).x, b(i).y
LINE (b
(i
).x
- b
(i
).w
* .5, b
(i
).y
- b
(i
).h
* .5)-STEP(b
(i
).w
, b
(i
).h
), b
(i
).K
, BF
'draw the boxes LINE (b
(i
- 1).x
- b
(i
- 1).w
* .5, b
(i
- 1).y
- b
(i
- 1).h
* .5)-STEP(b
(i
- 1).w
, b
(i
- 1).h
), b
(i
- 1).K
, BF
'draw the boxes LINE (b
(i
).x
- b
(i
).w
* .5, b
(i
).y
- b
(i
).h
* .5)-STEP(b
(i
).w
, b
(i
).h
), b
(i
).K
, BF
'draw the boxes COLOR &HFFFFFFFF, background
PRINT "Press any for next screen, escape or q to quit..."
SUB meander2
(x1
, y1
, x2
, y2
) ' snap to grid! gSize is shared startx = x1: starty = y1: endx = x2: endy = y2
x = startx: y = starty
time
= INT(RND * 8 + 4) ' total amount allowed to move The More the time the more the meander!!!! time = 3
startTime = time ' > 20 is too much!!
lastx = startx: lasty = starty
lastx = x
x = endx
dx
= units
(d
* (.4 * distx
* RND + gSize
), gSize
) x = x + dx
x = x + -dx
'LINE (lastx, y)-(x, y)
beeline lastx, y, x, y
lastmoveX = -1
lasty = y
y = endy
dy
= units
(d
* (.3 * disty
* RND + gSize
), gSize
) y = y + dy
y = y + -dy
'LINE (x, lasty)-(x, y)
beeline x, lasty, x, y
lastmoveX = 0
time = time - 1
'_LIMIT 10
dist:
distx = endx - x: disty = endy - y
Radius
= ABS(R
): RadiusError
= -Radius: X
= Radius: Y
= 0 LINE (CX
- X
, CY
)-(CX
+ X
, CY
), C
, BF
RadiusError = RadiusError + Y * 2 + 1
LINE (CX
- Y
, CY
- X
)-(CX
+ Y
, CY
- X
), C
, BF
LINE (CX
- Y
, CY
+ X
)-(CX
+ Y
, CY
+ X
), C
, BF
X = X - 1
RadiusError = RadiusError - X * 2
Y = Y + 1
LINE (CX
- X
, CY
- Y
)-(CX
+ X
, CY
- Y
), C
, BF
LINE (CX
- X
, CY
+ Y
)-(CX
+ X
, CY
+ Y
), C
, BF
SUB beeline
(x1
, y1
, x2
, y2
)
' this sub needs FUNCTION units (x, unit)
SUB drawGrid
(x1
, y1
, x2
, y2
, gsize
, gridClr
AS _UNSIGNED LONG) ' grid of square gsize X gsize ' fit a grid between x1, x2 and y1, y2
' x1, y1 top right corner and x2, y2 expected bottom right corner of boundary line
gx1 = units(x1, gsize): gy1 = units(y1, gsize) 'convert to grid coordinates
gx2 = units(x2, gsize): gy2 = units(y2, gsize)
IF gx1
< x1
THEN gx1
= gx1
+ gsize
'stay inside boundarys passed to sub IF gy1
< y1
THEN gy1
= gy1
+ gsize
IF gx1
>= gx2
OR gy1
>= gy2
THEN EXIT SUB 'that's not even a single square!
units
= INT(x
/ unit
) * unit