1
2 """ Scoreboard module
3
4 @author: fabius
5 @copyright: fabius@2010
6 @license: GCTA give credit to (the) authors
7 @version: 0.1
8 @date: 2010-05
9 @contact: astelix (U{panda3d forums<http://www.panda3d.org/forums/profile.php?mode=viewprofile&u=752>})
10 @status: eternal WIP
11
12 @note: il modo di fare clamp forse non va bene: poni il caso si vuole tenere 100 scores ma visualizzarne, a un certo momento, solo 10 e poi tutti e 100
13
14 @todo: la parte in remoto
15 """
16
17
19 """ A class to keep scores
20 """
21 - def __init__(self, filename="scores.csv", clamp=100):
22 """
23 @param clamp: clamp the score list to clamp elements
24 """
25 self._scoreboard=[]
26 self._filename=filename
27 self._clamp=clamp
28 self._loadscores()
29
30
32 self._scoreboard.append((int(score), player.lower()))
33 self._scoreboard=self.getscores()
34 try: fd=open(self._filename, "w+")
35 except: print "[putscore:error] can't write scorefile '%s'"%self._filename
36 else:
37 fd.write(
38 "\n".join(
39 ["%d;%s"%(item) for item in self._scoreboard[:self._clamp]]
40 )
41 )
42 fd.close()
43
44
46 self._scoreboard.sort()
47 self._scoreboard.reverse()
48 return self._scoreboard[:self._clamp]
49
50
51
53 try: fd=open(self._filename, "r")
54 except: print "[_loadscores:warning] scorefile does not exist"
55 else:
56 self._scoreboard=[]
57 for line in fd.readlines():
58 s=line.strip().split(';')
59 self._scoreboard.append((int(s[0]), s[1]))
60 fd.close()
61
62
63
64 if __name__ == "__main__":
65 """ usage test """
66 import random, rndname
67 sb=scorer(filename='scoretest.csv', clamp=10)
68 for idx in range(10):
69 name=rndname.generate()
70 for i in range(random.choice([1,1,1,2,2,3])):
71 score=random.randint(1, 15)
72 sb.putscore(name, score)
73 scoreboard=sb.getscores()
74
75 print "\n\nshowin scores:"
76 i=0
77 for item in scoreboard:
78 i+=1
79 print "%03d) %05d - %-20s."%(i,item[0],item[1])
80