我的游戏中的“生命”不会出现? pygame的

时间:2013-11-16 22:51:02

标签: python python-2.7 pygame

所以,在我的记忆游戏中,当你点击一个错误的按钮时我得到了它,你会失去生命。这有效!失去3条生命后,你输了。但问题在于,一旦启动,生命的文本就不会出现在我的游戏中。任何人都可以帮我吗? (如果您有兴趣查看整个代码,那么您可以在此处查看http://pastebin.com/rkBGC2rD

def main():
    global FPSCLOCK, DISPLAYSURF, BASICFONT, BEEP1, BEEP2, BEEP3, BEEP4

    pygame.init()
    FPSCLOCK = pygame.time.Clock()
    DISPLAYSURF = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption('Simulate')

    # font 
    BASICFONT = pygame.font.Font(None, 30)

    # load the sound files
    BEEP1 = pygame.mixer.Sound('beep1.wav')
    BEEP2 = pygame.mixer.Sound('beep2.wav')
    BEEP3 = pygame.mixer.Sound('beep3.wav')
    BEEP4 = pygame.mixer.Sound('beep4.wav')
    SOUNDTRACK = pygame.mixer.Sound('soundtrack.wav')
    ERROR = pygame.mixer.Sound('error.wav')

    # initialize some variables for a new game
    pattern = [] # stores the pattern of colors
    currentStep = 0 # the color the player must push next
    lastClickTime = 0 # "time stamp" of the player's last button push
    score = 0

    # plays the soundtrack music 
    SOUNDTRACK.play(-1, 0, 1000)

    # start-up screen text
    text = BASICFONT.render('Press enter to play!', 1, WHITE)
    textRect = text.get_rect()
    textRect.centerx = DISPLAYSURF.get_rect().centerx
    textRect.y = 150
    DISPLAYSURF.blit(text, textRect)

    # update the screen
    pygame.display.update()

    # the start up screen command
    waiting = True
    while waiting:      
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    waiting = False

    # amount of lives
    lives = 3
    img = BASICFONT.render('I'*lives, 1, WHITE)
    livesRect = img.get_rect()
    livesRect.topleft = (10, 10)
    DISPLAYSURF.blit(img, livesRect)

    # when False, the pattern is playing. when True, waiting for the player to click a colored button:
    waitingForInput = False

    while True: # main game loop
        clickedButton = None # button that was clicked (set to YELLOW, RED, GREEN, or BLUE)
        DISPLAYSURF.fill(bgColor)
        drawButtons()

        scoreSurf = BASICFONT.render('Score: ' + str(score), 1, WHITE)
        scoreRect = scoreSurf.get_rect()
        scoreRect.topleft = (WIDTH - 100, 10)
        DISPLAYSURF.blit(scoreSurf, scoreRect)      

        checkForQuit()
        for event in pygame.event.get(): # event handling loop
            if event.type == MOUSEBUTTONUP:
                mousex, mousey = event.pos
                clickedButton = getButtonClicked(mousex, mousey)

        if not waitingForInput:
            # play the pattern
            pygame.display.update()
            pygame.time.wait(1000)
            pattern.append(random.choice((YELLOW, BLUE, RED, GREEN)))
            for button in pattern:
                flashButtonAnimation(button)
                pygame.time.wait(FLASHDELAY)
            waitingForInput = True
        else:
            # wait for the player to enter buttons
            if clickedButton and clickedButton == pattern[currentStep]:
                # pushed the correct button
                flashButtonAnimation(clickedButton)
                currentStep += 1
                lastClickTime = time.time()

                if currentStep == len(pattern):
                    # pushed the last button in the pattern
                    score += 1
                    waitingForInput = False
                    currentStep = 0 # reset back to first step

            elif (clickedButton and clickedButton != pattern[currentStep]) or (currentStep != 0 and time.time() - TIMEOUT > lastClickTime):
                # pushed the incorrect button, or has timed out
                pattern = []
                currentStep = 0
                waitingForInput = False
                lives = lives - 1
                SOUNDTRACK.stop()
                ERROR.play()
                pygame.time.wait(1000)
                SOUNDTRACK.play(-1, 0, 1000)
                pygame.display.update()
                if lives < 1:               
                    gameOverAnimation()
                    # reset the variables for a new game:
                    pattern = []
                    currentStep = 0
                    waitingForInput = False
                    score = 0
                    pygame.time.wait(1000)

        pygame.display.update()
        FPSCLOCK.tick(FPS) 

2 个答案:

答案 0 :(得分:0)

在主循环中,您使用DISPLAYSURF.fill(bgColor)填充整个背景,但不要再次绘制livesRect

答案 1 :(得分:0)

每次更改lives时,都必须再次渲染

img = BASICFONT.render('I'*lives, 1, WHITE)

并在每个循环中显示

DISPLAYSURF.blit(img, livesRect)