' Missile Lock ' ' Copyright (C) 2006 Ian Cowburn (ianc@noddybox.co.uk) ' ' This program is free software; you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation; either version 2 of the License, or ' (at your option) any later version. ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' GNU General Public License for more details. ' ' You should have received a copy of the GNU General Public License ' along with this program; if not, write to the Free Software ' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ' ' ------------------------------------------------------------------------- ' ' $Id$ ' Strict Import noddybox.algorithm Import "global.bmx" Type GameState Global score:Int=0 Global x:Double=0 Global y:Double=0 Global ang:Int=0 Global lives:Int=0 Function Reset() score=0 x=400 y=300 ang=0 lives=3 End Function Function Control() If KeyDown(GameConfig.kleft) ang:-2 If ang<0 Then ang:+360 End If If KeyDown(GameConfig.kright) ang=(ang+2) Mod 360 End If End Function Function Move() x=(x+Lookup.si[ang]*2) Mod 800 y=(y-Lookup.co[ang]*2) Mod 600 If x<0 Then x:+800 If y<0 Then y:+600 Trail.Add() End Function Function Display() Local s:String="LIVES " For Local f:Int=1 To lives s:+"~~" Next GFX.font.Draw("SCORE",0,-0) GFX.font.Draw(Number.Format(score),0,16,255,255,0) GFX.font.Centre(s,0) GFX.font.DrawRight("HISCORE",799,0) GFX.font.DrawRight(Number.Format(GameConfig.hiscore),799,16,255,255,0) End Function End Type Type BackdropStar Field x:Double Field y:Double Field r:Int Field g:Int Field b:Int Method New() x=Rand(0,800) y=Rand(0,600) r=Rand(128,255) g=Rand(128,255) b=Rand(128,255) End Method End Type Type Backdrop Global s:BackdropStar[] Function Init() s=New BackdropStar[400] For Local f:Int=0 To 399 s[f]=New BackdropStar Next End Function Function Draw() For Local f:Int=0 To 399 SetColor(s[f].r,s[f].g,s[f].b) DrawImage(GFX.star,s[f].x,s[f].y) Next End Function End Type Type TrailPart Field x:Double Field y:Double Field ang:Double Field al:Double Field sc:Double Method New() x=GameState.x y=GameState.y ang=GameState.ang al=1 sc=1 End Method End Type Type Trail Global plist:TList Function Init() plist=CreateList() End Function Function Clear() plist.Clear() End Function Function Add() plist.AddLast(New TrailPart) End Function Function Draw() SetColor(255,255,255) Local l:TEasyLink=TEasyLink.Create(plist) While l.Value() Local t:TrailPart=TrailPart(l.Value()) If t.al>0.1 SetRotation(t.ang) SetScale(t.sc,t.sc) SetAlpha(t.al) DrawImage(GFX.flame,t.x,t.y) t.al:-0.05 't.sc:+0.1 l.MoveNext() Else l.Remove() EndIf Wend SetRotation(0) SetAlpha(1) SetScale(1,1) End Function End Type