Skip to main content
 首页 » 编程设计

python之如何在Pygame上显示玩家的分数

2025年05月04日9shihaiming

我是一名新程序员,正在为我的计算机科学总结设计一个内存游戏。游戏是这样的:计算机在随机位置显示随机框,然后用户必须猜测框的位置并单击它。

我基本上已经完成了,只是现在我正在尝试创建 5 个不同难度的关卡。例如,第 1 级将显示 2 个框,第 2 级将显示 5 个,等等。然后如果用户通过所有级别,他们可以再次玩。我知道很多,但我真的很想在这方面获得 A。

但现在我卡住了,因为在我尝试关闭窗口之前它并没有真正起作用,即使那样它也只进行了一半。任何帮助将不胜感激。

import pygame , sys 
import random 
import time 
size=[500,500] 
pygame.init() 
screen=pygame.display.set_mode(size) 
 
# Colours 
LIME = (0,255,0)  
RED = (255, 0, 0) 
BLACK = (0,0,0) 
PINK = (255,102,178) 
SALMON = (255,192,203) 
WHITE = (255,255,255) 
LIGHT_PINK = (255, 181, 197) 
SKY_BLUE = (176, 226, 255) 
screen.fill(BLACK) 
 
# Width and Height of game box 
width=50 
height=50 
 
# Margin between each cell 
margin = 5 
 
rows = 20 
columns = 20 
 
 
# Set title of screen 
pygame.display.set_caption("Spatial Recall") 
 
# Used to manage how fast the screen updates 
clock=pygame.time.Clock() 
 
 
coord=[] 
 
# Create a 2 dimensional array. A two dimesional 
# array is simply a list of lists. 
def resetGrid(): 
    grid = [] 
    for row in range(rows): 
        # Add an empty array that will hold each cell 
        # in this row 
        grid.append([]) 
        for column in range(columns): 
            grid[row].append(0) # Append a cell   
    return grid 
 
def displayAllPink(pygame): 
    for row in range(rows): 
        for column in range(columns): 
            color = LIGHT_PINK 
            pygame.draw.rect(screen,color,[(margin+width)*column + margin,(margin+height)*row+margin,width,height]) 
            pygame.display.flip()       
 
def displayOtherColor(pygame,grid): 
    coord = [] 
    for i in range(random.randint(2,5)): 
        x = random.randint(2, rows-1) 
        y = random.randint(2, columns-1)                 
        color = LIME     
        pygame.draw.rect(screen,color,[(margin+width)*y + margin,(margin+height)*x+margin,width,height]) 
        coord.append((x,y))   
        grid[x][y] = 1 
        pygame.display.flip()  
    time.sleep(1) 
    return coord 
 
def runGame(gameCount,coord,pygame,grid): 
    pygame.event.clear() 
    pygame.display.set_caption("Spatial Recall: Level "+ str(gameCount)) 
    pygame.time.set_timer(pygame.USEREVENT,1000) 
    time = 0 
    #clock.tick(  
            # -------- Main Program Loop ----------- 
    #Loop until the user clicks the close button. 
    done = False 
    while done==False:     
        event = pygame.event.wait() # User did something 
        if event.type == pygame.QUIT: # If user clicked close 
            done=True # Flag that we are done so we exit this loop 
            pygame.event.clear() 
            print "Game ",gameCount, "ends" 
        elif event.type == pygame.USEREVENT: 
            time = time + 1 
            pygame.display.set_caption("Spatial Recall: Level "+ str(gameCount) + " Time: "+ str(time)) 
            if time == 100: 
                done = True 
                pygame.display.set_caption("Time out, moving to next level") 
                pygame.event.clear() 
                return False 
        elif event.type == pygame.MOUSEBUTTONDOWN: 
            # User clicks the mouse. Get the position 
            pos = pygame.mouse.get_pos() 
            # Change the x/y screen coordinates to grid coordinates 
            column=pos[0] // (width+margin) 
            row=pos[1] // (height+margin) 
            if (row,column) in coord: 
                print coord 
                coord.remove((row,column)) 
                print coord 
                color = LIME 
                pygame.draw.rect(screen,color,[(margin+width)*column + margin,(margin+height)*row+margin,width,height]) 
                if coord == []: 
                    done=True  
                    pygame.display.set_caption("Time out, moving to next level") 
                    pygame.event.clear() 
                    return True 
            else: 
                color = RED 
                pygame.draw.rect(screen,color,[(margin+width)*column + margin,(margin+height)*row+margin,width,height]) 
            pygame.display.flip()  
 
 
def startTheGame(gameCount): 
    grid = resetGrid() 
    displayAllPink(pygame) 
    coord = displayOtherColor(pygame,grid) 
    displayAllPink(pygame) 
    runGame(gameCount,coord,pygame,grid) 
 
for i in range(2): 
    startTheGame(i+1) 
pygame.quit () 

请您参考如下方法:

您可能需要使用 pygame.font 模块。 http://pygame.org/docs/ref/font.html

  • 首先,从文件或系统字体函数之一加载字体。
  • 调用 YourFontObject.render(your_text_string)。这将返回一个 Surface,其中包含以给定字体呈现的字符串。请注意,您不能使用换行符 (\n)!您必须自己设置间距。
  • 在其他所有内容之后将此 Surface 复制到屏幕上,这样就不会遮挡它。

此外,您的函数中不需要 pygame 参数。

希望这对您有所帮助。