' masterGy algo not inventer by me 2020-06-21
'https://www.qb64.org/forum/index.php?topic=2735.new#new
' 2020-09-22 bplus mod to my way of code structure and comment code (where I understand it.
maze_x = 75 'maze size X
maze_y = 25 'maze size Y
'preparation -------------------------------------------------------------------------------------------------------------------------------------------
IF maze_x
/ 2 = INT(maze_x
/ 2) THEN maze_x
= maze_x
+ 1 ' make maze_x an odd number IF maze_y
/ 2 = INT(maze_y
/ 2) THEN maze_y
= maze_y
+ 1 ' make maze_y an odd number
monx = (maze_x + 10) * 8: mony = (maze_y + 5) * 16 'finding pixel sizes for screen
' with offsets x = 10*8 = 80 and y = 5*16 = 80
' so 40 pixel frame then?
' these are directions but is x or y listed first I would list x first y 2nd
d(0, 0) = 0: d(0, 1) = -1 ' North ? ? = needs to be confirmed
d(1, 0) = 0: d(1, 1) = 1 ' South ?
d(2, 0) = -1: d(2, 1) = 0 ' West ?
d(3, 0) = 1: d(3, 1) = 0 ' East ?
' key codes or map code looks like we end with just k$(0), k$(3) or k$(4) = k$(5)
k$(0) = "±" 'fal / adjustable wall
k$(1) = " " 'nem bejart ureg / non walked road
k$(2) = "W" 'lehetoseg / possible way
k$(3) = "U" 'szilard fal / standard wall = border
k$(4) = "!" 'bejart ureg / walked road = passage
k$(5) = "." 'belepesi pont / entry point = start or exit?
DIM maze
(maze_x
- 1, maze_y
- 1) AS _BYTE '0-fal 1-ureg 2-lehetoseg
'create empty maze -------------------------------------------------------------------
k = 0
IF tx
= 0 OR ty
= 0 OR tx
= maze_x
- 1 OR ty
= maze_y
- 1 THEN k
= 3 ' border maze(tx, ty) = k
'see what we made
GOSUB drawing
' ah so the bit math went and poked holes and made a grid
'start position ----------------------------------------------------------------------
maze(sx, sy) = 4 'the start of the way
'see what we made
GOSUB drawing
' ah so the bit math went and poked holes and made a grid
'way searching -----------------------------------------------------------------------
FOR tx
= 0 TO maze_x
- 1:
FOR ty
= 0 TO maze_y
- 1 van = 0
vpx1 = tx + d(t, 0): vpy1 = ty + d(t, 1): vpx2 = tx + d(t, 0) * 2: vpy2 = ty + d(t, 1) * 2
f
= (vpx2
> maze_x
- 1 OR vpx2
< 0) OR (vpy2
> maze_y
- 1 OR vpy2
< 0) IF maze
(vpx1
, vpy1
) = 0 AND maze
(vpx2
, vpy2
) = 1 THEN FOR t2
= 0 TO 3: vpx3
= vpx2
+ d
(t2
, 0): vpy3
= vpy2
+ d
(t2
, 1):
IF maze
(vpx3
, vpy3
) = 4 THEN GOTO kovi
maze(vpx1, vpy1) = 2: way(wdb, 0) = tx: way(wdb, 1) = ty: way(wdb, 2) = t: wdb = wdb + 1
kovi:
hovax = way(aw, 0) + d(way(aw, 2), 0) * t: hovay = way(aw, 1) + d(way(aw, 2), 1) * t
IF (maze
(hovax
, hovay
) = 2) OR (maze
(hovax
, hovay
) = 1) THEN maze
(hovax
, hovay
) = 4
FOR tx
= 0 TO maze_x
- 1:
FOR ty
= 0 TO maze_y
- 1:
IF maze
(tx
, ty
) = 2 THEN maze
(tx
, ty
) = 0
'entry point 1
sx
= 0: sy
= 3:
IF maze
(sx
+ 1, sy
) <> 4 THEN sy
= sy
+ 1maze(sx, sy) = 4
'entry point 2
sx
= maze_x
- 1: sy
= maze_y
- 3:
IF maze
(sx
- 1, sy
) <> 4 THEN sy
= sy
- 1maze(sx, sy) = 4
' it has taken so far to build the maze. contained in the maze array ------------------------------------------------------------------------------------------------
drawing:
' making offsets to fit inside screen pretty
sy
= INT((mony
/ 16 - maze_y
) / 2) + 1: sx
= INT((monx
/ 8 - maze_x
) / 2) + 1