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.
In 1989 there was this (Amiga) game called Pang where you had to pop balls that were bouncing around the screen. You controlled a character that could shoot up ropes and when it hit a ball the ball would split in two smaller balls. Once the balls were really small they would dissapear when hit. Here is a basic version of the game. Paste the code into Monkey and run it to see it. (resolution 640*480 default)
Code below :
Import mojo Class ball Field x:Float Field y:Float Field radius:Float = 32 Field ballbounce:Float Field direction:String Field incy:Float=0 Field delete:Bool=False Method New(_x:Int,_y:Int,_direction:String,_radius:Int,_ballbounce:Float) x = _x y = _y radius = _radius ballbounce = _ballbounce direction = _direction End Method Method update() If incy >= 0 Then If incy < Abs(ballbounce) Then incy+=.1 For Local i=0 Until incy y+=0.5 If y+radius > 288 Then incy=ballbounce Next End If If incy < 0 Then incy+=.1 For Local i=0 Until Abs(incy) y-=0.5 Next End If If direction = "left" x-=1 If x-radius<=0 Then direction="right" Else x+=1 If x+radius>=640 Then direction="left" End If For Local i:=Eachin r If circlerectcollide(x,y,radius,i.x,i.y-i.height,i.width,i.height) = True r.Remove i delete = True Select radius Case 32 b.AddLast(New ball(x,y,"left",20,-6)) b.AddLast(New ball(x+20,y,"right",20,-6)) Case 20 b.AddLast(New ball(x,y,"left",10,-5)) b.AddLast(New ball(x+10,y,"right",10,-5)) Case 10 b.AddLast(New ball(x,y,"left",6,-4)) b.AddLast(New ball(x+6,y,"right",6,-4)) End Select End If Next For Local i:=Eachin b If i.delete = True Then b.Remove i End If Next End Method Method draw() SetColor 255,0,0 DrawCircle x,y,radius End Method End Class Class rope Field x:Float Field y:Float Field height:Int Field width Field incy:Float=5 Field state:String="Nothing" Method New(_x:Int,_y:Int) x = _x y = _y state="expanding" height=0 width=8 End Method Method draw() SetColor 255,255,0 DrawRect x,y-height,width,height End Method Method update() Select state Case "expanding" For Local i=0 Until incy height+=1 If y-height < 0 Then state = "remove" Exit End If Next Case "remove" For Local i:=Eachin r If i.state = "remove" Then r.Remove i Next End Select End Method End Class Class player Field x:Float = 640/2 Field y:Float = 480/2 Field width:Int = 32 Field height:Int = 48 Field wait:Bool=False Method update() If KeyDown(KEY_RIGHT) For Local i=0 Until 3 If x+width < 640 x+=1 End If Next End If If KeyDown(KEY_LEFT) For Local i=0 Until 3 If x > 0 x-=1 End If Next End If If KeyHit(KEY_SPACE) r.AddFirst(New rope(x+12,y+48)) End If End Method Method draw() SetColor 255,255,255 DrawRect x,y,width,height End Method End Class Global r:List<rope> = New List<rope> Global b:List<ball> = New List<ball> Global p:player = New player Class MyGame Extends App Method OnCreate() SetUpdateRate(60) b.AddFirst(New ball(100,100,"left",32,-8)) End Method Method OnUpdate() For Local i:=Eachin r i.update Next For Local i:=Eachin b i.update Next If b.IsEmpty() = True Then b.AddLast(New ball(100,100,"left",32,-8)) End If p.update End Method Method OnRender() Cls 0,0,0 SetColor 255,255,255 For Local i:=Eachin b i.draw Next For Local i:=Eachin r i.draw Next SetColor 255,255,255 DrawText "Use cursor left/right to move, space to shoot rope.",0,0 DrawRect 0,288,640,480-288 p.draw End Method End Class Function circlerectcollide:Bool(cx:Int,cy:Int,cr:Int, rx:Int,ry:Int,rw:Int,rh:Int) Local closestx:Float = Clamp(cx, rx, rx+rw) Local closesty:Float = Clamp(cy, ry, ry+rh) Local distancex :Float = cx - closestx Local distancey:Float = cy - closesty Local distancesquared:Float = (distancex * distancex) + (distancey * distancey) Return distancesquared < (cr * cr) End Function 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.