Import mojo Class themap Field mapwidth:Int Field mapheight:Int Field tilewidth:Float Field tileheight:Float Field map:Int[][] Field cmode:Int=Rnd(1,4) Method New( mapwidth:Int, mapheight:Int) Self.mapwidth = mapwidth Self.mapheight = mapheight tilewidth = Float(DeviceWidth())/Float(mapwidth) tileheight = Float(DeviceHeight())/Float(mapheight) map = New Int[mapwidth][] For Local i = 0 Until mapwidth map[i] = New Int[mapheight] Next map[mapwidth/2][mapheight/2] = 255 For Local i=0 To (mapwidth*mapheight)/4 placeblock Next mapblur End Method Method mapblur() For Local i=0 To mapwidth*mapheight Local x1:Int=Rnd(2,mapwidth-4) Local y1:Int=Rnd(2,mapheight-4) If map[x1][y1] > 0 For Local y2=y1-1 To y1+1 For Local x2=x1-1 To x1+1 If map[x2][y2] = 0 map[x2][y2] = map[x1][y1] / 2 End If Next Next End If Next End Method Method placeblock() Local x:Int=Rnd(0,mapwidth) Local y:Int=Rnd(0,mapheight) Local fitsx:Int=Rnd(3,12) Local fitsy:Int=Rnd(3,12) If Rnd(0,10) < 2 Then If Rnd(1,3) = 1 fitsx = Rnd(6,22) fitsy = 3 Else fitsy = Rnd(6,22) fitsx = 3 End If End If If mapfit(x,y,fitsx,fitsy) = True fitmap(x,y,fitsx,fitsy) End If End Method Method fitmap(x:Int,y:Int,w:Int,h:Int) For Local y2 = y Until y+h For Local x2 = x Until x+w map[x2][y2] = 255 Next Next End Method Method mapfit:Bool(x:Int,y:Int,w:Int,h:Int) If x+w > mapwidth-3 Then Return False If y+h > mapheight-3 Then Return False If x<3 Then Return False If y<3 Then Return False For Local y2 = y Until y+h For Local x2 = x Until x+w If map[x2][y2] > 0 Then Return False Next Next For Local y2 = y+1 Until y+h-1 If map[x-1][y2] > 0 Then Return True If map[x+w][y2] > 0 Then Return True Next For Local x2 = x+1 Until x+w-1 If map[x2][y-1] > 0 Then Return True If map[x2][y+h] > 0 Then Return True Next End Method Method draw() For Local y:Float=0 Until mapheight Step 1 For Local x:Float=0 Until mapwidth Step 1 If map[x][y] > 0 Local d:Int = distance(x,y,320,240) d = d / 2.5 SetColor map[x][y],d,0 DrawRect x*tilewidth, y*tileheight, tilewidth+1, tileheight+1 End If Next Next End Method End Class Global mymap:themap Class MyGame Extends App Field refresh:Int Method OnCreate() SetUpdateRate(60) mymap = New themap(100,100) End Method Method OnUpdate() refresh+=1 If refresh>120 mymap = New themap(Rnd(100,200),Rnd(100,200)) refresh=0 Endif End Method Method OnRender() Cls 0,0,0 SetColor 255,255,255 mymap.draw End Method End Class Function Main() New MyGame() End Function Function distance:Int(x1:Int,y1:Int,x2:Int,y2:Int) Return Abs(x2-x1)+Abs(y2-y1) End Function
Artificial intelligence/templates/examples/rts/rpg/strategy ect. in MonkeyX/CerberusX language. You can download the free version of MonkeyX from itch.io or Cerberus-x.com The Flash applets will stop working in around 2020.
Saturday, April 2, 2016
MonkeyX - Map Island Dungeon Generator exp. - code example
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.