' Vectoroids ' ' Copyright 2005 Ian Cowburn ' ' $Id$ ' Strict Import "types.bmx" Type THiscore Const NUM:Int=5 Field score:THiscoreEnt[] Field col:Int[] Field coli:Int[] Function Load:THiscore() Local o:THiscore=New THiscore o.score=New THiscoreEnt[NUM] o.col=New Int[NUM] o.coli=New Int[NUM] For Local f:Int=0 Until NUM o.col[f]=254-f*20 o.coli[f]=1 Next Local s:TStream=ReadStream("vectoroids.hiscore") If s=Null For Local f:Int=0 Until NUM o.score[f]=THiscoreEnt.Create("SV",10000-f*2000) Next Else s=LittleEndianStream(s) For Local f:Int=0 Until NUM Local sc:Int=s.ReadInt() Local n:String=s.ReadString(3) o.score[f]=THiscoreEnt.Create(n,sc) Next s.Close() EndIf Return o End Function Method Save() Return Local s:TStream=WriteStream("vectoroids.hiscore") If s=Null Return EndIf s=LittleEndianStream(s) For Local sc:THiscoreEnt=EachIn score s.WriteInt(sc.score) s.WriteString(sc.name) Next s.Close() End Method Method Display(y:Int) GameGFX.font.Centre("ALL TIME HIGH SCORES",y) y:+20 For Local f:Int=0 Until NUM GameGFX.font.DrawColoured(score[f].name,300,y,col[f],col[f],col[f]) Local l:Int=GameGFX.font.TextWidth(score[f].score) GameGFX.font.DrawColoured(score[f].score,500-l,y,col[f],col[f],col[f]) y:+10 col[f]:+coli[f] If col[f]=255 Or col[f]=150 coli[f]=-coli[f] EndIf Next End Method Method CheckScore(sc:Int) If scGameConfig.kleft Or del=0) del=40 last=GameConfig.kleft cur:-1 If cur<0 cur:+Len(a) EndIf EndIf If KeyHit(GameConfig.kright) And (last<>GameConfig.kright Or del=0) del=40 last=GameConfig.kright cur:+1 If cur=Len(a) cur=0 EndIf EndIf If KeyDown(GameConfig.khyper) And (last<>GameConfig.kright Or del=0) del=40 last=GameConfig.kright cur:+1 If cur=Len(a) cur=0 EndIf EndIf GameGFX.font.Centre("enter your name for",0) GameGFX.font.Centre("the hall of fame",20) Flip FlushMem Wend score.Sort() Save() End Method End Type Type THiscoreEnt Field score:Int Field name:String Function Create:THiscoreEnt(name:String, score:Int) Local o:THiscoreEnt=New THiscoreEnt o.score=score o.name=name Return o End Function Method Compare(o:Object) Local os:THiscoreEnt=THiscoreEnt(o) If os Return score-os.score Else Return 0 EndIf End Method End Type