[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] High scores program



Iâm trying to code a âHigh Scores programâ, which simply accesses values from a separate file and then displays them on the screen. Hereâs my code:
 
#high scores program
#imports score values from a seperate file an prints them on the screen
 
import pygame,sys,random
from pygame import *
 
pygame.init()
 
WINWIDTH=640 #width of the window in pixels
WINHEIGHT=420 #height of the window in pixels
 
FPS=30 #frames per second
 
#        r   g   b
RED=  (255,  0,  0)
BLACK=(  0,  0,  0)
 
def get_text(pos,text,size,color):
    """Returns a text surface and a rect object based on the parameters given to be displayed on the screen. """
    BASICFONT=pygame.font.Font('freesansbold.ttf',size)
    textSurf=BASICFONT.render(text,True,RED)
    rectObj=textSurf.get_rect()
    retcObj.center=(size)
 
    return textSurf,rectObj
 
def displayScores():
    """Displays the high scores on the screen. """
    #keep track of how many scores have been displayed on the screen
    index=0
 
    #add each line of the high scores file into a list
    scores=[]
    for line in scoresFile:
        scores.append(line)
 
    #a list containing all of the score surfaces and rect objects
    scoresList=[]
 
    while True:
        DISPLAYSURF.fill(BLACK)
 
        for event in pygame.event.get(): #event loop
            if event.type==QUIT:
                pygame.quit()
                sys.exit()
 
        for i in scores:
            index+=1
            scoreSurf,scoreObj=get_text((WINWIDTH/2,(index*10)),'%s.:%s'%(index,i),15,RED)
            scoresList.append([scoreSurf,scoreObj])
 
        DISPLAYSURF.blit(scoresList[0][0],scoresList[0][1])
       
        pygame.display.update()
        FPSCLOCK.tick(FPS)
 
while True: #main loop
    global DISPLAYSURF,FPSCLOCK
 
    DISPLAYSURF=pygame.display.set_mode((WINWIDTH,WINHEIGHT))
    pygame.display.set_caption('High Scores!')
 
    FPSCLOCK=pygame.time.Clock()
 
    #randomly select a number between 1 and 100 to be added to the high scores
    randomScore=random.randint(0,100)
 
    #open the high scores file in read/ append mode
    scoresFile=open('highScores.txt','a+')
 
    displayScores()
 
    scoresFile.close()
 
Everytime I run the program I get an IndexError saying that when the line âDISPLAYSURF.blit(scoresList[0][0],scoresList[0][1])â runs, the list index is out of range. Can anyone help me? Iâm using Python 3.2.3.