Code archives/Algorithms/Random 3D/2D Dungeon Generator
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| A random 2d/3d dungeon generator, as the title says | |||||
;controls: mouse look + up/down/left/right
Graphics3D 640,480,32,2
AppTitle "A Auto-Dungeon Generator","Exit? NOOOO!!!!!!"
SeedRnd MilliSecs()
Type cube
Field x#,y#,z#
Field mesh
End Type
Dim level$(20,20) ;our level
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;go from left to right
y=Rand(5,14)
level$(x,y)="O"
For x=1 To 19
level$(x,y)="O"
y=y+Rand(-1,1)
If y<0 y=0
If y>20 y=20
level$(x,y)="O"
Next
y=Rand(5,14)
x=0
level$(x,y)="O"
For x=1 To 19
level$(x,y)="O"
y=y+Rand(-1,1)
If y<0 y=0
If y>20 y=20
level$(x,y)="O"
Next
;go from top to bottom
y=0
x=Rand(0,19)
level$(x,y)="O"
For y=1 To 19
level$(x,y)="O"
x=x+Rand(-1,1)
If x<0 x=0
If x>20 x=20
level$(x,y)="O"
Next
y=0
x=Rand(0,19)
level$(x,y)="O"
For y=1 To 19
level$(x,y)="O"
x=x+Rand(-1,1)
If x<0 x=0
If x>20 x=20
level$(x,y)="O"
Next
;fill in remaining places
For i=0 To 19
For p=0 To 19
If level$(i,p)<>"O" level$(i,p)="X"
Next
Next
;make 3d level
For i=0 To 19
For p=0 To 19
If level$(i,p)="O"
;nothing because its open
Else
c.cube=New cube
c\x#=i*3
c\y#=0
c\z#=p*3
c\mesh=CreateCube()
PositionEntity c\mesh,c\x#,c\y#,c\z#
EntityColor c\mesh,Rand(115,128),Rand(51,64),0 ;obviously take this away and replace
ScaleEntity c\mesh,1.5,1,1.5 ;with random texturing for coolness....
EndIf
Next
Print
Next
camera=CreateCamera()
l=CreateLight()
While Not KeyDown(1)
;mouse look taken from something i don't remember... :/ i was in a hurry...
mxs#=MouseXSpeed()*0.25
mys#=MouseYSpeed()*0.25
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
campitch=campitch+mys
If campitch<-85 Then campitch=-85
If campitch>85 Then campitch=85
RotateEntity camera,campitch,EntityYaw(camera)-mxs,0
mvx=mvx/1.2
mvy=mvy/1.2
mvz=mvz/1.2
MoveEntity camera,mvx,0,mvz
TranslateEntity camera,0,mvy,0
If EntityY(camera)>60 Then PositionEntity camera,EntityX(camera),60,EntityZ(camera)
If KeyDown(200) MoveEntity camera,0,0,0.1
If KeyDown(208) MoveEntity camera,0,0,-.1
If KeyDown(205) MoveEntity camera,0.1,0,0
If KeyDown(203) MoveEntity camera,-.1,0,0
If EntityY(camera)<>0 PositionEntity camera,EntityX(camera),0,EntityZ(camera)
RenderWorld
Flip
Cls
Wend |
Comments
| ||
| Oop... Here's a 2D version... It will look distorted this way, but that's because I'm using Print and Write so it won't be spread out or whatever.. ;controls: mouse look + up/down/left/right Graphics3D 640,480,32,2 AppTitle "A Auto-Dungeon Generator","Exit? NOOOO!!!!!!" SeedRnd MilliSecs() Dim level$(20,20) ;our level ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;go from left to right y=Rand(5,14) level$(x,y)="O" For x=1 To 19 level$(x,y)="O" y=y+Rand(-1,1) If y<0 y=0 If y>20 y=20 level$(x,y)="O" Next y=Rand(5,14) x=0 level$(x,y)="O" For x=1 To 19 level$(x,y)="O" y=y+Rand(-1,1) If y<0 y=0 If y>20 y=20 level$(x,y)="O" Next ;go from top to bottom y=0 x=Rand(0,19) level$(x,y)="O" For y=1 To 19 level$(x,y)="O" x=x+Rand(-1,1) If x<0 x=0 If x>20 x=20 level$(x,y)="O" Next y=0 x=Rand(0,19) level$(x,y)="O" For y=1 To 19 level$(x,y)="O" x=x+Rand(-1,1) If x<0 x=0 If x>20 x=20 level$(x,y)="O" Next ;fill in remaining places For i=0 To 19 For p=0 To 19 If level$(i,p)<>"O" level$(i,p)="X" Next Next For i=0 To 19 For p=0 To 19 If level$(i,p)="O" Color 0,255,0:Else:Color 255,0,0 Write level$(i,p) Next Print Next |
| ||
| Hey thanks! I was looking for something like this! I may ask you for a conversion to Blitzmax. My head hurts from trying to convert C and C++ version of this type of thing...and failing!! But enough of my whining. Again, thanks!! Great stuff! |
Code Archives Forum