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.
This code creates a drawing by drawing lines into the screen and increasing the image by one value on one side of the line. I saw this on a tutorial site once. I can't really remember if I did all the steps.
Import mojo Class openlist Field x:Int,y:Int Method New(x:Int,y:Int) Self.x = x Self.y = y End Method End Class Class heightmap Field ol:List<openlist> = New List<openlist> Field h:Int,w:Int ' hold the heightmap Field hmap:Int[][] 'hold the fillmap Field fmap:Int[][] Field x3:Int,y3:Int Field x4:Int,y4:Int Method New(w:Int,h:Int) Self.w = w Self.h = h hmap = New Int[w][] fmap = New Int[w][] For Local i = 0 Until w hmap[i] = New Int[h] fmap[i] = New Int[h] Next makeheightmap End Method Method makeheightmap() For Local i=0 Until 255 Local startside:Int Local endside:Int Local exitloop:Bool=False While exitloop = False endside = Rnd(1,5) startside = Rnd(1,5) If endside<>startside Then exitloop = True End If Wend x3=Rnd(w) y3=Rnd(h) x4=Rnd(w) y4=Rnd(h) Select startside Case 1 y3=0 Case 2 x3=w-1 Case 3 y3=h-1 Case 4 x3=0 End Select Select endside Case 1 y4=0 Case 2 x4=w-1 Case 3 y4=h-1 Case 4 x4=0 End Select clearfmap() line(x3,y3,x4,y4) fillfmap() addhmap() Next End Method Method addhmap() For Local y=0 Until h For Local x=0 Until w hmap[x][y]+=fmap[x][y] Next Next End Method Method fillfmap() Local exitloop:Bool=False Local x1:Int,y1:Int While exitloop = False x1=Rnd(w) y1=Rnd(h) If fmap[x1][y1] = 0 exitloop = True End If Wend ol.Clear ol.AddLast(New openlist(x1,y1)) fmap[x1][y1]=1 While ol.IsEmpty() = False For Local i:=Eachin ol Local tx:Int=i.x Local ty:Int=i.y If tx-1>-1 If fmap[tx-1][ty] = 0 ol.AddLast(New openlist(tx-1,ty)) fmap[tx-1][ty] = 1 End If End If If tx+1<w If fmap[tx+1][ty] = 0 ol.AddLast(New openlist(tx+1,ty)) fmap[tx+1][ty] = 1 End If End If If ty-1>-1 If fmap[tx][ty-1] = 0 ol.AddLast(New openlist(tx,ty-1)) fmap[tx][ty-1] = 1 End If End If If ty+1<h If fmap[tx][ty+1] = 0 ol.AddLast(New openlist(tx,ty+1)) fmap[tx][ty+1] = 1 End If End If ol.Remove i Next Wend End Method Method line:Void(x1:Int,y1:Int,x2:Int,y2:Int) Local dx:Int, dy:Int, sx:Int, sy:Int, e:Int dx = Abs(x2 - x1) sx = -1 If x1 < x2 Then sx = 1 dy = Abs(y2 - y1) sy = -1 If y1 < y2 Then sy = 1 If dx < dy Then e = dx / 2 Else e = dy / 2 End If Local exitloop:Bool=False While exitloop = False fmap[x1][y1] = 1 If x1 = x2 If y1 = y2 exitloop = True End If End If If dx > dy Then x1 += sx ; e -= dy If e < 0 Then e += dx ; y1 += sy Else y1 += sy ; e -= dx If e < 0 Then e += dy ; x1 += sx Endif Wend End Method Method clearfmap() For Local y=0 Until h For Local x=0 Until w fmap[x][y] = 0 Next Next End Method Method draw() Local sx:Float=DeviceWidth()/Float(w) Local sy:Float=DeviceHeight()/Float(h) For Local y=0 Until h For Local x=0 Until w Local g:Int=hmap[x][y] SetColor g/1.5,g/1.5,g DrawRect x*sx,y*sy,sx+1,sy+1 Next Next End Method End Class Global myhmap:heightmap = New heightmap(100,100) Class MyGame Extends App Field refreshtime:Int=0 Method OnCreate() SetUpdateRate(10) End Method Method OnUpdate() refreshtime+=1 If refreshtime>10 myhmap = New heightmap(100,100) refreshtime=0 End If End Method Method OnRender() Cls 0,0,0 SetColor 255,255,255 myhmap.draw End Method End Class Function Main() New MyGame() End Function
Note: Only a member of this blog may post a comment.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.