Super!! Now add a imagebuffer to draw the maze on, save the image buffer as a bmp file, load the bmp file as a terrain, texture it, scale it, light it and then you have a fast dungeon for a game----(if you add in characters, monsters, treasures etc.... Nice Work!
Please note that you will have to use your own images for the textures. The code shows my bmp,png,jpg directories and file names!
Dim horizwalls(0, 0)
Dim vertwalls(0, 0)
Dim walkable(0, 0)
Graphics 1024,768,0,2
SetBuffer BackBuffer()
Global mazebuf=CreateImage(512,512)
MazeWidth% = Input("How wide do you want the maze to be? ")
MazeHeight% = Input("How high do you want the maze to be? ")
Cls
StartTime% = MilliSecs()
GenerateMaze(MazeWidth%, MazeHeight%)
StopTime% = MilliSecs()
DrawMaze(MazeWidth%, MazeHeight%, StopTime% - StartTime%)
;--------------------------------------------------------------
Cls
Graphics3D 1024,768,16
SetBuffer BackBuffer()
light=CreateLight()
PositionEntity light,100,100,100
camera=CreateCamera()
PositionEntity camera,100,4,120
CameraRange camera,.1,800
mazio=LoadTerrain("bmp/mazo1.bmp")
maziotex=LoadTexture("jpg/woodpanel.jpg")
ScaleTexture maziotex,4,4
TerrainDetail mazio,3000,True
EntityTexture mazio,maziotex
ScaleTexture maziotex,4,4
ScaleEntity mazio,1,6,1
sky = CreateSphere(36)
FlipMesh sky
ScaleEntity sky,512,300,512
PositionEntity sky,256,0,256
sky_tex=LoadTexture("png/cloud256.png")
ScaleTexture sky_tex,1,1
EntityTexture sky,sky_tex
EntityOrder sky,1
While Not KeyDown(1)
If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
If KeyDown( 208 )=True Then MoveEntity camera,0,0,-.5
If KeyDown( 200 )=True Then MoveEntity camera,0,0,.5
UpdateWorld
RenderWorld
Flip
Wend
;0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-
Function GenerateMaze(width%, height%)
; This function generates the entire maze
; Redim arrays to hold all required data
Dim walkable(width%, height%)
Dim horizwalls(width%, height%)
Dim vertwalls(width%, height%)
; Declare some local variables
Local wentleft = False
Local wentright = False
Local wentup = False
Local wenddown = False
Local roomcount = False
; Randomize Rnd-function
SeedRnd MilliSecs()
; Fill entire arrays with "True"
For x = 1 To width%
For y = 1 To height%
horizwalls(x, y) = True
vertwalls(x, y) = True
Next
Next
; Start generating the maze at a random point in the grid (between 1 and 20 in both directions)
xx = Int(Rnd(1, width%))
yy = Int(Rnd(1, height%))
; Set current tile as "walkable"
walkable(xx, yy) = True
; Set some other vars
wentleft = False
wentright = False
wentup = False
wentdown = False
; Count rooms (number of tiles already created)
roomcount = 1
Repeat
; Choose any direction to go next
Direction = Int(Rnd(1, 4))
If wentup And wentdown And wentright And wentleft Then
Repeat
xx = Int(Rnd(1, width))
yy = Int(Rnd(1, height))
Until walkable(xx, yy) = True
End If
; Store current xx and yy positions
oxx = xx
oyy = yy
Select Direction
Case 1 ; up
yy = yy - 1
If yy < 1 Then yy = 1
If walkable(xx, yy) = False Then
roomcount = roomcount + 1
walkable(xx, yy) = True
horizwalls(xx, yy) = False
wentup = True
Else
yy = oyy
End If
Case 2 ; left
xx = xx - 1
If xx < 1 Then xx = 1
If walkable(xx, yy) = False Then
roomcount = roomcount + 1
walkable(xx, yy) = True
vertwalls(xx, yy) = False
wentleft = True
Else
xx = oxx
End If
Case 3 ; down
yy = yy + 1
If yy > height Then yy = height
If walkable(xx, yy) = False Then
roomcount = roomcount + 1
walkable(xx, yy) = True
horizwalls(oxx, oyy) = False
wentdown = True
Else
yy = oyy
End If
Case 4 ; right
xx = xx + 1
If xx > width Then xx = width
If walkable(xx, yy) = False Then
roomcount = roomcount + 1
walkable(xx, yy) = True
vertwalls(oxx, oyy) = False
wentright = True
Else
xx = oxx
End If
End Select
Until roomcount = width * height
End Function
Function DrawMaze(width%, height%, TimeNeeded%)
Cls
SetBuffer ImageBuffer(mazebuf)
Color 255, 255, 255
Line 50, 50, 50, 50 + (height% * 10)
Line 50, 50, 50 + (width% * 10), 50
For y = 1 To height%
For x = 1 To width%
If horizwalls(x, y) Then
Line (x * 10) + 40, (y * 10) + 50, (x * 10) + 50, (y * 10) + 50
EndIf
Next
Next
For y = 1 To height%
For x = 1 To width%
If vertwalls(x, y) Then
Line (x * 10) + 50, (y * 10) + 40, (x * 10) + 50, (y * 10) + 50
EndIf
Next
Next
Flip
SaveBuffer(ImageBuffer(mazebuf),"bmp/mazo1.bmp")
; press any key to exit this function
WaitKey()
End Function