Hi scores shuffle

Blitz3D Forums/Blitz3D Beginners Area/Hi scores shuffle

_PJ_(Posted 2003) [#1]
I have a high score table in my game. However, when I try to insert a score into the table, although it appears in correct place, and the scores above are right, any that follow are not right can anyone see where I have gone wrong?



position=0

For f=10 To 1 Step-1

number=(hiscoredata$(f,2))

If score>number

	position=f
	
EndIf

Next


If position>0
	For f=(position) To 9
	
		hiscoredata$(f,1)=hiscoredata$(f+1,1)
		hiscoredata$(f,2)=hiscoredata$(f+1,2)
		
	Next
	
	hiscoredata$(position,1)=name$
	hiscoredata$(position,2)=score
	
ffile=WriteFile("HSTable.SCO")
	For f=1 To 10
	WriteLine ffile,hiscoredata$(f,1)
	WriteLine ffile,hiscoredata$(f,2)
	Next
		
	
EndIf













I know it's to do with this section:

If position>0
	For f=(position) To 9
	
		hiscoredata$(f,1)=hiscoredata$(f+1,1)
		hiscoredata$(f,2)=hiscoredata$(f+1,2)
		
	Next
	
	hiscoredata$(position,1)=name$
	hiscoredata$(position,2)=score


but I can't see how to correct it - (I gess it's the heat :) )


_PJ_(Posted 2003) [#2]
Ah got it.

It shold have been:



hiscoredata$(f+1,1)=hiscoredata$(f,1)
hiscoredata$(f+1,2)=hiscoredata$(f,2)



_PJ_(Posted 2003) [#3]
Now I have the high scores under the new one repeated:

i.e.


10000 AAA
9000 BBB
8000 CCC
7500 Test
7000 DDD
7000 DDD
7000 DDD
7000 DDD
7000 DDD
7000 DDD


Warren(Posted 2003) [#4]
What I did for my high score table was :

- check if the score belongs on the table
- if it does, overwrite the bottom row of the table with the new score
- sort the table

Seemed simpler than trying to figure out which position it belongs in and reshuffling all the indices.


FlameDuck(Posted 2003) [#5]
Yeah. EpicBoys approach is definately the "less hassle" way.


Rob Farley(Posted 2003) [#6]
Malice,

Just work it from the bottom to the top and it will work.

[code]If position>0
For f=9 to (position) step -1

hiscoredata$(f+1,1)=hiscoredata$(f,1)
hiscoredata$(f+1,2)=hiscoredata$(f,2)

Next

hiscoredata$(position,1)=name$
hiscoredata$(position,2)=score
[code]


_PJ_(Posted 2003) [#7]
doh!!!

I really am gonna blame the heat on this one :)


wedoe(Posted 2003) [#8]
Or look at my website (www.blitzbasic.no) for a complete hightscore system :)

Lets's say you display 20 highest scores.
Just insert the new score at 21 and sort and you're all set.