简体   繁体   English

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

[英]How to display player's score on Pygame?

I'm a new programmer working on a memory game for my computer science summative.The game goes like this: the computer displays random boxes at random positions and then the user has to guess where the boxes are and click on it. 我是一名新程序员,致力于为我的计算机科学总结性的记忆游戏,游戏的过程是这样的:计算机在随机位置显示随机的盒子,然后用户必须猜测盒子的位置并单击它。

I'm basically done, except right now I'm trying to create 5 different levels that range in level of difficulty. 我基本上已经完成了,除了现在我正在尝试创建5个不同级别的难度级别。 eg level 1 will display 2 boxes and level 2 will display 5, etc. And then if the user gets through all levels they can play again. 例如,级别1将显示2个框,级别2将显示5个框,依此类推。然后,如果用户通过所有级别,则可以再次播放。 I know its a lot but I really want to get an A on this. 我非常了解它,但我真的很想在此获得A。

But right now I'm stuck because it doesn't really work until I try to close the window, and even then it only goes halfway. 但是现在我被困住了,因为直到我尝试关闭窗口,它才真正起作用,即使那样它也只能进行一半。 Any help would be appreciated. 任何帮助,将不胜感激。

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 ()

You may want to use the pygame.font module. 您可能要使用pygame.font模块。 http://pygame.org/docs/ref/font.html http://pygame.org/docs/ref/font.html

  • First, load a font, either from a file or from one of the system font functions. 首先,从文件或系统字体功能之一加载字体。
  • Call YourFontObject.render(your_text_string) . 调用YourFontObject.render(your_text_string) That'll return a Surface that contains the string rendered in the given font. 这将返回一个Surface ,其中包含以给定字体呈现的字符串。 Note, you can't use newline ( \\n ) characters! 请注意,您不能使用换行符( \\n )! You'll have to do the spacing yourself. 您必须自己进行间距。
  • Blit this Surface onto the screen after everything else so nothing will obscure it. 在其他所有操作之后,将此Surface蒙版到屏幕上,这样就不会掩盖它了。

Also, you don't need the pygame parameter in your functions. 另外,您在函数中不需要pygame参数。

Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM