diff options
author | Ian C <ianc@noddybox.co.uk> | 2005-11-01 00:07:13 +0000 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2005-11-01 00:07:13 +0000 |
commit | efbbdf1ebbc3f6964369c08d4cbe0978c5a424dd (patch) | |
tree | 9935ae0bd6b21448f58880718a83ca7ce038612a /hiscore.bmx | |
parent | 1d7d7169274da3f75460396b0b7d35116effc0d0 (diff) |
Initial import
Diffstat (limited to 'hiscore.bmx')
-rw-r--r-- | hiscore.bmx | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/hiscore.bmx b/hiscore.bmx new file mode 100644 index 0000000..96c6935 --- /dev/null +++ b/hiscore.bmx @@ -0,0 +1,164 @@ +' 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 sc<score[NUM-1].score + Return + EndIf + + Local done:Int=False + Local a:String="abcdefghijklmnopqrstuvwxyz{}" + Local curs:Int=0 + Local nm:String="" + Local last:Int=0 + Local del:Int=0 + + While Not done + Cls + + If del + del:-1 + EndIf + + If KeyHit(GameConfig.kleft) And (last<>GameConfig.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 |