http://www.jungleide.com/
A rather good editor for MonkeyX and CerberusX is now free. It will not receive more updates but it will be kept alive.
Jungle Ide has automated target sdk installation. I was even able to get the Flash target working again. Though the flash target currently only compiles with the vanilla monkeyx. Not with cerberusx and jungle.
Monkey Game Programming step by step
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.
Wednesday, March 14, 2018
Sunday, November 12, 2017
Monkey-X - Generator - Cartoon Clouds - code example
Import mojo
Class cloud
Field px:Float,py:Float
Field pw:Int,ph:Int
Field mx:Float
Field sw:Int
Method New(x:Int,y:Int,w:Int,h:Int,sw:Int)
px = x
py = y
pw = w
ph = h
Self.sw = sw
mx = Rnd(0.05,0.2)
End Method
Method update()
px += mx
If px > sw+pw Then px = 0-(pw*2)
End Method
' This method draws a cloud/
' at x,y with width w and height h
Method draw()
' Draw 7 plumps (go around in a circle)
For Local angle:Int=0 Until 360 Step 360/7
Local x2:Float=Cos(angle)*pw
Local y2:Float=Sin(angle)*ph
SetColor 0,0,0
DrawOval(x2+px,y2+py,pw,ph)
SetColor 255,255,255
DrawOval(x2+px+4,y2+py+4,pw-8,ph-8)
Next
' Draw a white oval to erase the center of the cloud
SetColor 255,255,255
DrawOval(px-pw/2,py-ph/2,pw+pw,ph+ph)
End Method
End Class
Class MyGame Extends App
Field mycloud:List<cloud> = New List<cloud>
Method OnCreate()
SetUpdateRate(60)
Seed = GetDate[4]*GetDate[5]
For Local i:Int = 0 Until 15
mycloud.AddLast(New cloud(Rnd(-DeviceWidth*.5,DeviceWidth),Rnd(DeviceHeight),Rnd(30,130),Rnd(20,50),DeviceWidth))
Next
End Method
Method OnUpdate()
For Local i:=Eachin mycloud
i.update()
Next
End Method
Method OnRender()
Cls 0,0,255
For Local i:=Eachin mycloud
i.draw()
Next
End Method
End Class
Function Main()
New MyGame()
End Function
Monkey-X - Generator - 10 Print Chr - code example
Import mojo
Class MyGame Extends App
Field x:Int,y:Int
Field spacing:Int=10
Field map:Int[][]
Method OnCreate()
SetUpdateRate(60)
map = New Int[100][]
For Local i:Int=0 Until 100
map[i] = New Int[100]
Next
makemaze()
End Method
Method OnUpdate()
If KeyHit(KEY_SPACE) Or MouseHit(MOUSE_LEFT)
makemaze()
End If
End Method
Method OnRender()
Cls 0,0,0
drawmaze()
DrawText "Press Space or Mouse for new maze",0,0
End Method
Method drawmaze()
For Local y:Int=0 Until 100
For Local x:Int=0 Until 100
Select map[x][y]
Case 0
DrawLine x*10,y*10,x*10+10,y*10+10
Case 1
DrawLine x*10+10,y*10,x*10,y*10+10
End Select
Next
Next
End Method
Method makemaze()
For Local y:Int=0 Until 100
For Local x:Int=0 Until 100
If Rnd(1)<.5 Then map[x][y] = 1 Else map[x][y] = 0
Next
Next
End Method
End Class
Function Main()
New MyGame()
End Function
Monkey-X - Beginners - Class in array - code example
Import mojo
'
' This is our enemy class
'
Class enemy
Field px:Int,py:Int
Method New(x:Int,y:Int)
Self.px = x
Self.py = y
End Method
Method move(x:Int,y:Int)
px += x
py += y
End Method
End Class
Class MyGame Extends App
' How many enemies are there
Field numenemies:Int=10
' Set up the array using the enemy class
Field myenemy:enemy[]
Method OnCreate()
' Create the enemies in the array
myenemy = New enemy[numenemies]
For Local i:Int=0 Until numenemies
myenemy[i] = New enemy(Rnd(DeviceWidth()),Rnd(DeviceHeight))
Next
End Method
Method OnUpdate()
End Method
Method OnRender()
Cls 0,0,0
SetColor 255,255,255
' Loop through all array containers (numenemies)
' and draw them.
For Local i:=Eachin myenemy
DrawRect i.px,i.py,32,32
Next
' We can acces arrays directly and call/modify anything inside it.
myenemy[0].move(5,0)
If myenemy[0].px > DeviceWidth Then myenemy[0].px = -10
End Method
End Class
Function Main()
New MyGame()
End Function
Monkey-X - Lerp - Linear Interpolation - patrolling - code example
Import mojo
Class MyGame Extends App
Field enemyx:Int,enemyy:Int
Field startx:Int=100,starty:Int=100
Field destx:Int=320,desty:Int=230
Field percentage:Float=0 ' how far in the path are we
Field stp:Float=0.01 ' how fast do we move
Method OnCreate()
SetUpdateRate(60) ' Fps
enemyx = startx
enemyy = starty
End Method
Method OnUpdate()
' Get our new x and y position
enemyx = lerp(percentage,startx,destx)
enemyy = lerp(percentage,starty,desty)
' Set the new position
percentage+=stp
' Keep inside the value of 0.0 and 1.0
If percentage<=0 Or percentage>=1 Then stp=-stp
End Method
Method OnRender()
Cls 0,0,0
SetColor 255,255,255
' Draw the enemy sprite
DrawRect enemyx,enemyy,32,32
'
DrawText "Lerp(Linear Interpolation) Patrolling - example",0,0
End Method
' Percentage 0 to 1 returns number between a and b
Function lerp:Int(t:Float , a:Float, b:Float)
Return a + t * (b - a)
End Function
End Class
Function Main()
New MyGame()
End Function
Friday, November 10, 2017
Monkey-X - Generator - Simple 2d Pixelart tree - code example
Import mojo
Class tree
Field px:Int,py:Int
Field pw:Float,ph:Float
Field mapone:Int[][]
Field treecolor1:Int=Rnd(230,255)
Field treecolor1r:Int=Rnd(50,200)
Field treecolor2:Int=Rnd(190,220)
Field treecolor3:Int=Rnd(130,180)
Field treecolor4:Int=Rnd(70,120)
Field basecolor1:Int=150
Field basecolor2:Int=190
Field basecolor3:Int=220
Method New(x:Int,y:Int,w:Int,h:Int)
If Rnd(3)<2 Then treecolor1r = 0
px = x
py = y
pw = w
ph = h
mapone = New Int[w][]
For Local i:Int=0 Until w
mapone[i] = New Int[h]
Next
maketree()
End Method
Method maketree()
Local mx:Float=0.05
Local my:Float=.1
Local y:Float=1
Local x:Float=pw/2+1
Local base:Float=0
Local bounce:Float=.1
Local col:Int
Local num:Float=2
Local stap:Float=Rnd(0.001,0.005)
Local stap2:Float=Rnd(0.01,0.2)
Local stap3:Float=Rnd(0.5,1.5)
' Place two black pixels at the top of the tree
mapone[x-1][0] = 1
mapone[x-2][0] = 1
' create the tree
While (y+5)<=(ph-(ph/20))
y+=my
x+=mx
' stay inside the image
If x>=pw Then x=pw-2
If x<=0 Then x=0
' change color of the tree depending
' on the current y location
If y<ph/1.4 Then col = treecolor4
If y<ph/1.6 Then col = treecolor3
If y<ph/1.9 Then col = treecolor2
If y<ph/4 Then col = treecolor1
' fill the current line
filltoleft(x,y,pw-x,col)
' black pixel to the left and right
mapone[x][y] = 1
mapone[pw-x][y] = 1
' next step in the tree shape
mx-=stap
If y<ph/1.45 Then
If mx<0
If x < ((pw/2)+num) Then mx=bounce ; bounce+=stap2 ; num+=stap3
End If
Else
If mx<0
If x<((pw/2)+num) Then bounce=.1 ; mx=bounce ; num-=stap3
Endif
End If
Wend
' Make sure the bottom of the tree is also drawn
filltoleft(x,y,pw-x,1)
' Make the tree trunk
maketreebase()
End Method
'
' Fill from x to tox on y line using col(or)
' We go from right to left and fill the line with
' a number. (tree inside color)
'
Method filltoleft(x:Int,y:Int,tox:Int,col:Int)
Local ls:Int=(pw/2)
Local len1:Int=(x-ls)/2
Local len2:Int=(x-ls)/1.7
For Local x2:Int=x To tox Step -1
mapone[x2][y] = col
If col = treecolor2 Then
If Rnd(4) < 1 And distance(x2,0,tox,0) < len1 And y<ph/2 Then mapone[x2][y] = treecolor1
If Rnd(4) < 1 And distance(x2,0,x,0)< len1 And y<ph/2 Then mapone[x2][y] = treecolor1
If Rnd(2)<1.3 And distance(x2,0,ls-len1,0) < 2 And y<ph/2 Then mapone[x2][y] = treecolor1
If Rnd(2)<1.3 And distance(x2,0,ls+len1,0) < 2 And y<ph/2 Then mapone[x2][y] = treecolor1
End If
If col=treecolor1
If Rnd(2) < 1 And y>5 And distance(x2,0,ls,0) < 3 Then mapone[x2][y] = treecolor2
End If
If col=treecolor3
If Rnd(2)<1.3 And distance(x2,0,ls,0) < len2 And y<ph/1.8 Then mapone[x2][y] = treecolor2
End If
If col=treecolor4
If Rnd(2)<1.3 And distance(x2,0,ls,0) < len2 And y<ph/1.45 Then mapone[x2][y] = treecolor3
End If
Next
End Method
Function distance:Int(x1:Int,y1:Int,x2:Int,y2:Int)
Return Abs(x2-x1)+Abs(y2-y1)
End Function
Method maketreebase()
' treebase
For Local y:Int=ph-(ph/5) Until ph
For Local x:Int=(pw/2)-(pw/8) Until (pw/2)+(pw/8)
If x<0 Or y<0 Or x>=pw Or y>= ph Then Continue
mapone[x][y] = basecolor1
If x=(pw/2)-(pw/8) Then mapone[x][y] = 1
If x=(pw/2)+(pw/8)-1 Then mapone[x][y]=1
If y=ph-1 Then mapone[x][y]=1
Next
Next
For Local y:Int=ph-(ph/5) Until ph-(ph/5)
For Local x:Int=(pw/2)-(pw/8) Until (pw/2)+(pw/8)
If x<0 Or y<0 Or x>=pw Or y>= ph Then Continue
mapone[x][y] = 1
Next
Next
' tree base center lighting
For Local y:Int=ph-(ph/7) Until ph-1
For Local x:Int=(pw/2)-(pw/30) Until (pw/2)+(pw/30)
If x<0 Or y<0 Or x>=pw Or y>= ph Then Continue
mapone[x][y] = basecolor3
Next
Next
For Local y:Int=ph-(ph/7) Until ph-1
For Local x:Int=(pw/2) Until (pw/2)+(pw/30)
If x<0 Or y<0 Or x>=pw Or y>= ph Then Continue
mapone[x][y] = basecolor2
Next
Next
'Remove two black pixels from the bottom of the treebase
mapone[(pw/2)-(pw/8)][ph-1] = 0
mapone[(pw/2)+(pw/8)-1][ph-1] = 0
End Method
Method draw()
For Local y:Int=0 Until ph
For Local x:Int=0 Until pw
If mapone[x][y] = 0 Then Continue
Select mapone[x][y]
Case 1
SetColor 0,0,0
Case treecolor1
SetColor treecolor1r/2,treecolor1,0
Case treecolor2
SetColor treecolor1r/1.5,treecolor2,0
Case treecolor3
SetColor treecolor1r/1.2,treecolor3,0
Case treecolor4
SetColor treecolor1r,treecolor4,0
Case basecolor1
SetColor basecolor1,basecolor1/2,0
Case basecolor2
SetColor basecolor2,basecolor2/2,0
Case basecolor3
SetColor basecolor3,basecolor3/2,0
End Select
DrawRect px+(x*1),py+(y*1),1,1
Next
Next
End Method
End Class
Class MyGame Extends App
Field mytree:List<tree>
Field time:Int=Millisecs()
Field hw:Int=48,hh:Int=64
Method OnCreate()
Seed = GetDate[4]*GetDate[5]
SetUpdateRate(1)
maketrees()
End Method
Method OnUpdate()
If KeyHit(KEY_SPACE) Or Millisecs() > time
time=Millisecs()+2000
maketrees
End If
End Method
Method OnRender()
Cls 0,0,0
SetColor 50,125,235
DrawRect 0,0,DeviceWidth,150+hh
SetColor 50,155,255
DrawRect 0,100,DeviceWidth,(150+hh)-100
SetColor 5,250,5
DrawRect 0,150+hh,DeviceWidth,DeviceHeight-(150+hh)
SetColor 125,250,125
DrawRect 0,150+hh,DeviceWidth,2
For Local i:=Eachin mytree
i.draw()
Next
End Method
Method maketrees()
mytree = New List<tree>
For Local x:Int=0 Until DeviceWidth Step 64
If Rnd(3)<2 Then mytree.AddLast(New tree(x,150,48,64))
Next
Local sy:Int=0
For Local i:Int=0 Until 35
mytree.AddLast(New tree(Rnd(DeviceWidth),150+sy,48,64))
sy+=8
Next
End Method
End Class
Function Main()
New MyGame()
End Function
Thursday, November 9, 2017
Monkey-X - Generator - 2d Houses (town) - code example
Import mojo
Class building
Field px:Int,py:Int
Field totalwidth:Int
Field blockhouse:Int=1
Field blockdoor:Int=2
' For collision (enter/flee in home/shop)
Field doorx:Int,doory:Int
Field doorwidth:Int,doorheight:Int
Field blocksmallwindow:Int=3
Field blockwidewindow:Int=4
Field blockcrateleft:Int=5
Field blockcrateright:Int=6
Field blockiceboxleft:Int=7
Field blockiceboxright:Int=7
Field blocktoiletleft:Int=8
Field blocktoiletright:Int=9
Field blockfrontcrate:Int=10
Field blockrooftop:Int=11
Field blockchimney:Int=12
Field blockshopsign:Int=13
Field houselayer:Int[]=New Int[3] 'base blocks
Field rooftoplayer:Int[]=New Int[3]
Field chimneylayer:Int[]=New Int[3]
Field doorlayer:Int[] = New Int[3]
Field windowlayer:Int[] = New Int[3] '011010'
Field housesidelayer:Int[] = New Int[2]
Field shopsignlayer:Int[] = New Int[3]
Field frontlayer:Int[] = New Int[6]
Method New(x:Int,y:Int,w:Int,isshop:Bool)
px = x
py = y
totalwidth = w
makehouse(w,isshop)
End Method
Method makehouse(w:Int,isshop:Bool)
' Make the base house blocks
For Local i:Int=0 Until w
houselayer[i] = blockhouse
Next
' Create the items at the side of the houses
If Rnd(10)<5
' add to which side(s)
Local sides:String="left"
If Rnd(10)<3 Then sides="right"
If Rnd(10)<3 Then sides="both"
' Add items to side(s)
If sides="left" Or sides="both" Then
housesidelayer[0] = blocktoiletleft
If Rnd(10)<3 Then
housesidelayer[0] = blockcrateleft
End If
If Rnd(10)<3 Then
housesidelayer[0] = blockiceboxleft
End If
Endif
If sides="right" Or sides="both" Then
housesidelayer[1] = blocktoiletright
If Rnd(10)<3 Then
housesidelayer[1] = blockcrateright
End If
If Rnd(10)<3 Then
housesidelayer[1] = blockiceboxright
End If
Endif
End If
'Create the crates at the front of the house
For Local i:Int= 0 Until (w*2)-2
If Rnd(10)<2 Then
frontlayer[i] = blockfrontcrate
End If
Next
'Create windows
Select w
Case 2
windowlayer[0] = blocksmallwindow
Case 3
windowlayer[0] = blockwidewindow
End Select
' create door
Select w
Case 1
doorlayer[0] = blockdoor
If isshop Then shopsignlayer[0] = blockshopsign
Case 2
doorlayer[1] = blockdoor
If isshop Then shopsignlayer[1] = blockshopsign
Case 3
doorlayer[2] = blockdoor
If isshop Then shopsignlayer[2] = blockshopsign
End Select
' rooftop
Select w
Case 1
rooftoplayer[0] = blockrooftop
Case 2
rooftoplayer[0] = blockrooftop
rooftoplayer[1] = blockrooftop
Case 3
rooftoplayer[0] = blockrooftop
rooftoplayer[1] = blockrooftop
rooftoplayer[2] = blockrooftop
End Select
' chimney
Select w
Case 1
chimneylayer[0] = blockchimney
Case 2
chimneylayer[Rnd(0,2)] = blockchimney
Case 3
chimneylayer[Rnd(0,3)] = blockchimney
End Select
End Method
Method draw(w:Int,h:Int)
Local bw:Int=w
Local bh:Int=h
' Draw the house blocks
For Local i:Int=0 Until 3
If houselayer[i] = blockhouse Then
SetColor 150,140,150
DrawRect px+(i*bw),py,bw+1,bh
SetColor 200,200,200
DrawRect px+(i*bw),py,bw,bh
'SetColor 230,230,230
'shadow top
SetColor 60,60,60
DrawRect px+(i*bw),py,bw,bh/15
'shadow bottom
SetColor 150,150,150
DrawRect px+(i*bw),py+bh/1.1,bw,bh/8
'highlight left
If i=0
SetColor 220,220,220
DrawRect px+(i*bw),py,1,bh/3
Endif
End If
Next
' Draw the rooftop
For Local i:Int=0 Until 3
If rooftoplayer[i] = blockrooftop Then
'SetColor 200,100,100
SetColor 170,70,60
DrawRect px+(i*bw),py-(bh/1.5),bw,bh-(bh/3)
' Bottom shade
SetColor 130,50,30
'SetColor 200,100,100
DrawRect px+(i*bw),py-(bh/8),bw,bh/8
' top shade
SetColor 190,90,80
DrawRect px+(i*bw),py-(bh/1.5),bw,1
' top shade
If i=0
'horizontal
SetColor 220,120,110
DrawRect px+(i*bw),py-(bh/1.5),bw/2,1
'vertical
SetColor 200,100,100
DrawRect px+(i*bw),py-(bh/1.5),1,bh/3
End If
End If
Next
' Draw the chimney
For Local i:Int=0 Until 3
If chimneylayer[i] = blockchimney Then
SetColor 100,100,100
DrawRect px+(i*bw)+(bw/4),py-(bh/1.2),bw/2.5,bh/4
'chimney highlight
SetColor 140,130,120
DrawRect px+(i*bw)+(bw/4),py-(bh/1.2),bw/6,1
End If
Next
'Draw the windows
For Local i:Int=0 Until 3
If windowlayer[i] = blocksmallwindow
SetColor 0,100,200
DrawRect px+(i*bw)+(bw/3),py+(bh/5),bw-(bw/3),bh-(bh/2.5)
' light bottom
SetColor 0,115,210
DrawRect px+(i*bw)+(bw/3),py+(bh/2),bw-(bw/3),(bh/3.3)
' dark bottom
SetColor 180,125,20
DrawRect px+(i*bw)+(bw/3),py+(bh*.7),bw-(bw/3),(bh/8.3)
End If
If windowlayer[i] = blockwidewindow
SetColor 0,100,200
DrawRect px+(i*bw)+(bw/3),py+(bh/5),(bw*2)-(bw/3),bh-(bh/2.5)
'light bottom
SetColor 0,115,210
DrawRect px+(i*bw)+(bw/3),py+(bh/2),(bw*2)-(bw/3),(bh/3.3)
'dark bottom
SetColor 180,125,20
DrawRect px+(i*bw)+(bw/3),py+(bh*.7),(bw*2)-(bw/3),(bh/8.3)
End If
Next
' Draw the door
For Local i:Int=0 Until 3
If doorlayer[i] = blockdoor
SetColor 100,50,50
If shopsignlayer[i] = blockshopsign
SetColor 250,200,50
End If
DrawRect px+(i*bw)+(bw/5),py+(bh/5),bw-(bw/2),bh-(bh/4)
' doorknob
SetColor 200,210,210
DrawRect px+(i*bw)+(bw/2),py+(bh/1.7),(bw/9),(bh/9)
'numberplate
SetColor 200,250,250
DrawRect px+(i*bw)+(bw/1.3),py+(bh/3),(bw/9),(bh/9)
SetColor 10,50,50
DrawRect px+(i*bw)+(bw/1.25),py+(bh/2.8),(bw/18),(bh/14)
End If
Next
' Draw the sides
If housesidelayer[0] = blocktoiletleft Then drawtoilet(px,py,bw,bh,"left")
If housesidelayer[1] = blocktoiletright Then drawtoilet(px,py,bw,bh,"right")
If housesidelayer[0] = blockcrateleft Then drawsidecrate(px,py,bw,bh,"left")
If housesidelayer[1] = blockcrateright Then drawsidecrate(px,py,bw,bh,"right")
If housesidelayer[0] = blockiceboxleft Then drawsideicebox(px,py,bw,bh,"left")
If housesidelayer[1] = blockiceboxright Then drawsideicebox(px,py,bw,bh,"right")
'Draw the crates at the front of the house
For Local i:Int=0 Until (totalwidth*2)-2
If frontlayer[i] = blockfrontcrate
SetColor 100,50,50
DrawRect px+((bw/2)*i),py+bh/1.2,bw/4,bh/6.4
End If
Next
'Draw the shop sign
For Local i:Int=0 Until totalwidth
If shopsignlayer[i] = blockshopsign
SetColor 255,40,30
Local x:Int=px+(bw*i)-bw/8
Local y:Int=py-bh/5
DrawRect x,y,bw*1.2,bh/3
SetColor 255,255,255
'DrawText "Shop X",x+5,y+5
DrawRect x+bh/10,y+bh/12,4,4
End If
Next
End Method
Method drawtoilet(x:Int,y:Int,w:Int,h:Int,side:String)
If side = "left"
Local ltx:Float=x-w/2
Local lty:Float=y+(h/4)
Local rtx:Float=ltx+(w/2)
Local rty:Float=lty
Local lbx:Float=ltx
Local lby:Float=lty+(h-h/4)
Local rbx:Float=ltx+(w/2)
Local rby:Float=lby
Local toil:Float[8]
toil[0] = ltx
toil[1] = lty-(h/6)
toil[2] = rtx
toil[3] = rty
toil[4] = rbx
toil[5] = rby
toil[6] = lbx
toil[7] = lby
SetColor 150,50,50
DrawPoly(toil)
'DrawRect x-w/2,y+10,w/2,h-10
Elseif side="right"
Local ltx:Float=(x)+(totalwidth*w)
Local lty:Float=y+(h/4)
Local rtx:Float=ltx+(w/2)
Local rty:Float=lty
Local rbx:Float=ltx+(w/2)
Local rby:Float=rty+(h-h/4)
Local lbx:Float=ltx
Local lby:Float=rby
SetColor 150,50,50
Local box:Float[8]
box[0] = ltx
box[1] = lty
box[2] = rtx
box[3] = rty-(h/6)
box[4] = rbx
box[5] = rby
box[6] = lbx
box[7] = lby
DrawPoly(box)
' SetColor 100,50,50
' DrawRect (x)+totalwidth*w,y+10,w/2,h-10
End If
End Method
Method drawsidecrate(x:Int,y:Int,w:Int,h:Int,side:String)
If side = "left"
' pipe
SetColor 120,120,120
DrawRect x-w/8,y,w/8,h
'barrel
SetColor 100,50,50
DrawRect x-w/3,y+(h/1.5),w/3,h-(h/1.5)
Elseif side="right"
'pipe
SetColor 120,120,120
DrawRect (x)+totalwidth*w,y,w/8,h
'barrel
SetColor 100,50,50
DrawRect (x)+totalwidth*w,y+(h/1.5),w/3,h-(h/1.5)
End If
End Method
Method drawsideicebox(x:Int,y:Int,w:Int,h:Int,side:String)
If side = "left"
Local ltx:Float=x-w/2
Local lty:Float=y+(h/1.5)
Local rtx:Float=ltx+(w/2)
Local rty:Float=lty
Local lbx:Float=ltx
Local lby:Float=lty+(h-h/1.5)
Local rbx:Float=ltx+(w/2)
Local rby:Float=lby
SetColor 200,200,200
Local box:Float[8]
box[0] = ltx
box[1] = lty+(h/6)
box[2] = rtx
box[3] = rty
box[4] = rbx
box[5] = rby
box[6] = lbx
box[7] = lby
'DrawRect ltx,lty,w/2,h-(h/1.5)
DrawPoly(box)
Elseif side="right"
Local ltx:Float=(x)+(totalwidth*w)
Local lty:Float=y+(h/1.5)
Local rtx:Float=ltx+(w/2)
Local rty:Float=lty
Local rbx:Float=ltx+(w/2)
Local rby:Float=rty+(h-h/1.5)
Local lbx:Float=ltx
Local lby:Float=rby
SetColor 200,200,200
Local box:Float[8]
box[0] = ltx
box[1] = lty
box[2] = rtx
box[3] = rty+h/6
box[4] = rbx
box[5] = rby
box[6] = lbx
box[7] = lby
DrawPoly(box)
'DrawRect (x)+totalwidth*w,y+(h/1.5),w/2,h-(h/1.5)
End If
End Method
End Class
Class MyGame Extends App
Field mybuilding:List<building>
Field time:Int=Millisecs()
Field hw:Int=48,hh:Int=64
Method OnCreate()
Seed = GetDate[4]*GetDate[5]
SetUpdateRate(2)
makehouses()
End Method
Method OnUpdate()
If KeyHit(KEY_SPACE) Or Millisecs() > time
time=Millisecs()+2000
makehouses
End If
End Method
Method OnRender()
Cls 0,0,0
SetColor 50,155,255
DrawRect 0,0,DeviceWidth,150+hh
SetColor 50,125,235
DrawRect 0,100,DeviceWidth,(150+hh)-100
SetColor 5,250,5
DrawRect 0,150+hh,DeviceWidth,DeviceHeight-(150+hh)
SetColor 125,250,125
DrawRect 0,150+hh,DeviceWidth,2
For Local i:=Eachin mybuilding
i.draw(hw,hh)
Next
End Method
Method makehouses()
mybuilding = New List<building>
hw = Rnd(20,50)
hh = hw
Local st:Int=hw*4
Local x:Int=0
While x<DeviceWidth
Local z1:Bool
If Rnd(5)<1 Then z1 = True
Local w:Int = Rnd(1,4)
st = hw*(w+2)
' mybuilding = New building(x,150,Rnd(1,4),z1)
mybuilding.AddLast(New building(x,150,w,z1))
x+=st
Wend
End Method
End Class
Function Main()
New MyGame()
End Function
Subscribe to:
Posts (Atom)