Ported from a example by AdamStrange from a thread on the Blitzmax forum.
Link
Import mojo Class themap Field mapwidth:Int Field mapheight:Int Field tilewidth:Float Field tileheight:Float Field map:Float[][] Method New( mapwidth:Int, mapheight:Int, numpoints:Int) Self.mapwidth = mapwidth Self.mapheight = mapheight tilewidth = DeviceWidth()/Float(mapwidth) tileheight = DeviceHeight()/Float(mapheight) map = New Float[mapwidth][] For Local i = 0 Until mapwidth map[i] = New Float[mapheight] Next addheightmappoints(numpoints) For Local i=0 Until numpoints expandheightmap next End Method Method expandheightmap() For Local n=0 To 100000 Local x1:Int=Rnd(1,mapwidth-1) Local y1:Int=Rnd(1,mapheight-1) If map[x1][y1] > 0 For Local y2=y1-1 To y1+1 For Local x2=x1-1 To x1+1 If map[x1][y1] > map[x2][y2] map[x2][y2] = (map[x1][y1]+ map[x2][y2])*Rnd(0.49,0.5) End If Next Next End If Next End Method Method addheightmappoints(count:Int) For Local i=0 Until count Local x:Int=Rnd( mapwidth/2-(mapwidth/3), mapwidth/2+(mapwidth/3)) Local y:Int=Rnd( mapheight/2-(mapheight/3), mapheight/2+(mapheight/3)) map[x][y] = Rnd(64,200) Next End Method Method drawmap() For Local y:Float=0 Until mapheight Step 1 For Local x:Float=0 Until mapwidth Step 1 SetColor map[x][y],0,0 DrawRect x*tilewidth, y*tileheight, tilewidth+1, tileheight+1 Next Next End Method Method clearheightmap() End Method End Class Global mymap:themap Class MyGame Extends App Field nm:Int Method OnCreate() SetUpdateRate(60) Local date := GetDate() Seed = date[5] mymap = New themap( Rnd(50,150), Rnd(50,150), Rnd(2,20)) End Method Method OnUpdate() nm+=1 If nm>100 mymap = New themap( Rnd(50,150), Rnd(50,150), Rnd(2,20)) nm=0 End If End Method Method OnRender() Cls 0,0,0 mymap.drawmap SetColor 255,255,255 DrawText "MonkeyX - Heightmap/"+ "texture/image generator", 0,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.