Smart n Sweet Maze Maker (Source Included)
BlitzMax Forums/BlitzMax Programming/Smart n Sweet Maze Maker (Source Included)
| ||
| With the learning of a new inkey$ routine, I thought I would share with you a neat little maze program I wrote. Unlike other maze programs, this one guarantees only one path through. Meaning, if you take a different course (starting either at the exit or beginning), you will not be able to finish it. It is random each time and you can also change the size of it, too. Default it is a pretty simple maze, but increase the size and it gets rather tricky to circumnavigate to say the least. Perfect for those dungeons where monsters lurk around every corner ! Enjoi ! ![]()
' ______________________________________
' // //
' // Smart N' Sweet Maze Maker v0.03 //
' // Written by David W - 12/17/15 //
'//___________________________________//
' THANKS TO TOM TOAD FOR INKEY$() ROUTINE !
' KEYSTROKES:
' SPACE to knock out a wall
' R to rapid finish rest of map
' ENTER when maze drawn to exit
Strict
SeedRnd MilliSecs()
Global sizex=32,sizey=32 ' change to size of maze you want (must be EVEN # !)
Global recx=1024.0/sizex
Global recy=738/sizey
Global map[sizex+1,sizey+1]
Local a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
Local ax,ay,cc$
Local watch=1 ' change to 0 for instant maze making
' /// MAIN PROGRAM BEGINS ///
sizey:-1
sizex:-1
Graphics 1024,768
For i=0 To sizey
For j=0 To sizex
If(j*i)Mod 2=0
map[j,i]=1
ElseIf j*i>0 And j<sizex And i<sizey
c:+1
EndIf
Next
Next
Repeat
If f+watch=2
map[x,y]=2
nano
Repeat
Flip
cc$=inkey$()
If cc$=Chr$(27)
End
EndIf
If Lower$(cc$)="r"
watch=0
EndIf
Until cc$=" " Or watch=0
map[x,y]=0
EndIf
Repeat
If e=0
e=4
Repeat
x=1+rn(sizex/2)*2
y=1+rn(sizey/2)*2
t=bricks(x,y)
Until(f=0 And t=1)Or(f=1 And t=3)
f=1
r=rn(4)
EndIf
ax=0
ay=0
e:-1
If r=0
ay=-1
ElseIf r=1
ay=1
ElseIf r=2
ax=-1
Else
ax=1
EndIf
r=(r+1)Mod 4
t=bricks(x+ax*2,y+ay*2)
Until t=1Or t=6
e=4
x:+ax
y:+ay
p:+1
r=rn(4) ' REM this out for a truly TWISTY maze
map[x,y]=0
x:+ax
y:+ay
Until p=c-1
map[0,1]=0
map[sizex-1,sizey-2]=0
nano
Repeat
Flip
Until GetChar()=13
Function rn(n)
Return Rand(0,n-1)
EndFunction
Function bound(a,b,c)
If a<b Then Return b
If a>c Then Return c
Return a
EndFunction
Function mymap(x,y)
Return map[bound(x,0,sizex),bound(y,0,sizey)]
EndFunction
Function bricks(x,y)
Local i,j,c
For i=-1To 1
For j=-1To 1
If mymap(x+j,y+i)=0
c:+1
EndIf
Next
Next
Return c
EndFunction
Function nano()
Local i,j
For i=0 To sizey-1
For j=0 To sizex-1
SetColor 255,0,0
If map[j,i]=0 Then SetColor 0,0,0
If map[j,i]=1 Then SetColor 192,128,64
DrawRect j*recx,i*recy,recx,recy
Next
Next
EndFunction
Function inkey$()
Return Chr(GetChar())
EndFunction
|
