Here a example where turrets try to aim towards the path of the player so the bullet wil have more chance of hitting the player. There are 2 bullet speeds for the turrets. Control the player with the cursor keys.
Import mojo Class bullet Field x:Float,y:Float Field angle:Int Field speed:Float Field delete:Bool=False Method New(x:Int,y:Int,angle:Int,speed:Float) Self.x = x Self.y = y Self.angle = angle Self.speed = speed End Method Method update() x+=Cos(angle)*speed y+=Sin(angle)*speed If x<0 Then delete = True If x>DeviceWidth() Then delete = True If y<0 Then delete = True If y>DeviceHeight() Then delete = True End Method Method draw() SetColor 255,255,0 DrawOval x,y,8,8 End Method End Class Class turret Field x:Int,y:Int Field firecountdown:Int=30 Method New(x:Int,y:Int) Self.x = x Self.y = y End Method Method update() firecountdown-=1 If firecountdown<0 Then firecountdown = 30 Local firedist:Int=4 If distance(myplayer.x, myplayer.y,x,y) > 256 Then firedist=10 mybullet.AddLast(New bullet(x,y, getangle(myplayer.tx, myplayer.ty,x+Rnd(-16,16), y+Rnd(-16,16)), firedist)) End If End Method Method draw() SetColor 255,0,0 DrawOval x,y,32,32 End Method Method getangle:Int(x1:Int,y1:Int,x2:Int,y2:Int) Return ATan2(y1-y2, x1-x2) End Method Function distance:Int(x1:Int,y1:Int,x2:Int,y2:Int) Return Abs(x2-x1)+Abs(y2-y1) End Function End Class Class player Field x:Float=100,y:Float=100 Field w:Float=32,h:Float=32 Field angle:Int Field speed:Float=0 Field tx:Int,ty:Int Method New() End Method Method update() If speed>0.0 Then speed-=0.05 If KeyDown(KEY_RIGHT) angle+=2 End If If KeyDown(KEY_LEFT) angle-=2 End If If angle<0 Then angle=360 If angle>360 Then angle=0 If KeyDown(KEY_UP) If speed < 2 Then speed+=.1 End If x+=Cos(angle)*speed y+=Sin(angle)*speed ' get the target coords for the turrets tx=x+(Cos(angle)*speed*32) ty=y+(Sin(angle)*speed*32) End Method Method draw() SetColor 100,100,0 For Local i=0 Until speed*20 Local y2=Int(Sin(angle)*i) Local x2=Int(Cos(angle)*i) DrawOval x+x2,y+y2,32,32 Next SetColor 255,255,255 DrawOval x,y,w,h Local y2:Int=(Sin(angle)*48) Local x2:Int=(Cos(angle)*48) DrawLine x+16,y+16,x+16+x2,y+16+y2 End Method End Class Global myturret:List<turret> = New List<turret> Global mybullet:List<bullet> = New List<bullet> Global myplayer:player = New player Class MyApp Extends App Method OnCreate() SetUpdateRate(60) myturret.AddLast(New turret(200,200)) myturret.AddLast(New turret(400,400)) End Method Method OnUpdate() For Local i:=Eachin myturret i.update Next For Local i:=Eachin mybullet i.update Next myplayer.update For Local i:=Eachin mybullet If i.delete = True Then mybullet.Remove i Next End Method Method OnRender() Cls 0,0,0 For Local i:=Eachin mybullet i.draw Next For Local i:=Eachin myturret i.draw Next myplayer.draw SetColor 255,255,255 DrawText "Monkey-X Targeting example.",10,10 DrawText "Cursor left and Right = turn , cursor up = move",10,30 End Method End Class Function Main() New MyApp End Function
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.