I think I fixed the previous mistakes in the maze generator.
Import mojo Global maxwidth:Int=60 Global maxheight:Int=40 Class maze Field map:Bool[][] Field w:Int,h:Int Field dirx:Int[] = [0,1,0,-1] Field diry:Int[] = [-1,0,1,0] Field rd:Int Method New(w:Int,h:Int,rd:Int) Self.w = w Self.h = h map = New Bool[w][] For Local i = 0 Until w map[i] = New Bool[h] Next Self.rd=rd makemaze End Method Method makemaze() Local count:Int=0 For Local i=0 Until w*h Local x = 2 + (Int(((w - 2) * Rnd) / 2) * 2) Local y = 2 + (Int(((h - 2) * Rnd) / 2) * 2) If count=0 Then map[x][y] = True Local dir:Int=Rnd(0,4) If map[x][y] = True While spacetaken(x+(dirx[dir]*2),y+(diry[dir]*2)) = False map[x][y] = True map[x+dirx[dir]][y+diry[dir]] = True x+=dirx[dir] y+=diry[dir] If Rnd(0,rd) < rd/10 Then dir=Rnd(0,4) End If Wend End If Next End Method Method spacetaken:Bool(x:Int,y:Int) If x>-1 And y>-1 And x<w And y<h Return map[x][y] End If Return True End Method Method draw() Local tw:Float=DeviceWidth()/Float(w) Local th:Float=DeviceHeight()/Float(h) For Local y=0 Until h For Local x=0 Until w If map[x][y] = False Local d:Int Local dx:Int=x*tw Local dy:Int=y*th d = distance(dx,dy,320,200) d=d/2.5 SetColor 255-d,(255-d)/2,(255-d)/2 DrawRect dx,dy,tw+1,th+1 End If Next Next End Method Function distance:Int(x1:Int,y1:Int,x2:Int,y2:Int) Return Abs(x2-x1)+Abs(y2-y1) End Function End Class Global mymaze:maze = New maze( maxwidth, maxheight, Rnd(0,40)) Class MyGame Extends App Field w:Int,h:Int Field rd:Int field cnt:Int Method OnCreate() SetUpdateRate(10) Local date := GetDate() ' set the random seed to ' current second Seed = date[5] End Method Method OnUpdate() cnt+=1 If KeyHit(KEY_RIGHT) Or cnt>30 cnt=0 w = Rnd(20,maxwidth) h = Rnd(15,maxheight) rd = Rnd(0,40) If Rnd(0,10) < 3 w=Rnd(50,200) h=Rnd(50,150) End If mymaze = New maze(w,h,rd) End If End Method Method OnRender() Cls 0,0,0 mymaze.draw SetColor 0,0,0 DrawRect 0,0,DeviceWidth()/2,15 SetColor 255,255,255 DrawText "Maze width :"+w+ " height "+h+ " and rdness "+ rd,10,0 End Method End Class Function Main() New MyGame() End Function
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.