Maze generation: Difference between revisions
Content added Content deleted
(Add XPL0) |
(Added BBC BASIC) |
||
Line 508: | Line 508: | ||
| | | |
| | | |
||
+-+-+-+-+-+-+-+-+-+-+-+</pre> |
+-+-+-+-+-+-+-+-+-+-+-+</pre> |
||
=={{header|BBC BASIC}}== |
|||
{{works with|BBC BASIC for Windows}} |
|||
<lang bbcbasic> MazeWidth% = 11 |
|||
MazeHeight% = 9 |
|||
MazeCell% = 50 |
|||
VDU 23,22,MazeWidth%*MazeCell%/2+3;MazeHeight%*MazeCell%/2+3;8,16,16,128 |
|||
VDU 23,23,3;0;0;0; : REM Line thickness |
|||
PROCgeneratemaze(Maze&(), MazeWidth%, MazeHeight%, MazeCell%) |
|||
END |
|||
DEF PROCgeneratemaze(RETURN m&(), w%, h%, s%) |
|||
LOCAL x%, y% |
|||
DIM m&(w%, h%) |
|||
FOR y% = 0 TO h% |
|||
LINE 0,y%*s%,w%*s%,y%*s% |
|||
NEXT |
|||
FOR x% = 0 TO w% |
|||
LINE x%*s%,0,x%*s%,h%*s% |
|||
NEXT |
|||
GCOL 15 |
|||
PROCcell(m&(), RND(w%)-1, y% = RND(h%)-1, w%, h%, s%) |
|||
ENDPROC |
|||
DEF PROCcell(m&(), x%, y%, w%, h%, s%) |
|||
LOCAL i%, p%, q%, r% |
|||
m&(x%,y%) OR= &80 : REM Mark visited |
|||
r% = RND(4) |
|||
FOR i% = r% TO r%+3 |
|||
CASE i% MOD 4 OF |
|||
WHEN 0: p% = x%-1 : q% = y% |
|||
WHEN 1: p% = x%+1 : q% = y% |
|||
WHEN 2: p% = x% : q% = y%-1 |
|||
WHEN 3: p% = x% : q% = y%+1 |
|||
ENDCASE |
|||
IF p% >= 0 IF p% < w% IF q% >= 0 IF q% < h% IF m&(p%,q%) < &80 THEN |
|||
IF p% > x% m&(p%,q%) OR= 1 : LINE p%*s%,y%*s%+4,p%*s%,(y%+1)*s%-4 |
|||
IF q% > y% m&(p%,q%) OR= 2 : LINE x%*s%+4,q%*s%,(x%+1)*s%-4,q%*s% |
|||
IF x% > p% m&(x%,y%) OR= 1 : LINE x%*s%,y%*s%+4,x%*s%,(y%+1)*s%-4 |
|||
IF y% > q% m&(x%,y%) OR= 2 : LINE x%*s%+4,y%*s%,(x%+1)*s%-4,y%*s% |
|||
PROCcell(m&(), p%, q%, w%, h%, s%) |
|||
ENDIF |
|||
NEXT |
|||
ENDPROC</lang> |
|||
'''Sample output:''' |
|||
<br> |
|||
[[File:maze_bbc.gif]] |
|||
=={{header|C}}== |
=={{header|C}}== |