On Wed, Oct 24, 2012 at 4:50 PM, Myles Broomes
<
mylesbroomes@xxxxxxxxxxxxx> wrote:
> 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.