summaryrefslogtreecommitdiff
path: root/hiscore.bmx
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2005-11-01 00:07:13 +0000
committerIan C <ianc@noddybox.co.uk>2005-11-01 00:07:13 +0000
commitefbbdf1ebbc3f6964369c08d4cbe0978c5a424dd (patch)
tree9935ae0bd6b21448f58880718a83ca7ce038612a /hiscore.bmx
parent1d7d7169274da3f75460396b0b7d35116effc0d0 (diff)
Initial import
Diffstat (limited to 'hiscore.bmx')
-rw-r--r--hiscore.bmx164
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