Module scorer
[frames] | no frames]

Source Code for Module scorer

 1  # -*- coding: utf-8 -*- 
 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  #import hashlib, urllib 
17   
18 -class scorer(object):
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 #
31 - def putscore(self, player, score):
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 #
45 - def getscores(self):
46 self._scoreboard.sort() 47 self._scoreboard.reverse() 48 return self._scoreboard[:self._clamp]
49 50 #---------------------------------------------------------------------- 51 #
52 - def _loadscores(self):
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