2013-11-16 3 views
2

Итак, в моей памяти я получил это, когда вы нажимаете неправильную кнопку, вы теряете жизнь. И это работает! Потеряв 3 жизни, вы проиграете. Но проблема в том, что текст для жизни не появится в моей игре после ее запуска. Может ли кто-нибудь помочь мне? (Если вы заинтересованы в том, чтобы весь код, то вы могли бы смотреть на него здесь http://pastebin.com/rkBGC2rD)«Жизнь» в моей игре не появится? pygame

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) 
+0

Поместите код из основного цикла в функции, чтобы сделать его чище. Создание классов. Прочитайте [Выполнение игр с Python & Pygame] (http://inventwithpython.com/pygame/chapters/). Кстати: вы можете использовать 'pygame.time.get_ticks()' вместо 'time.time()'. – furas

ответ

0

В главном цикле, вы заполняете по всему фону с DISPLAYSURF.fill(bgColor), но не рисую livesRect снова.

+0

Хорошо, так я и сделал, и это сработало! Но теперь число жизней не уменьшается? @Philip – user3000345

+1

Вы повторно переводите 'livesRect' каждый раз с обновленным количеством жизней или просто используя один и тот же снова и снова? – Philip

0

Каждый раз, когда вы меняете lives вы должны оказывать снова

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

и отображать его в каждом цикле

DISPLAYSURF.blit(img, livesRect) 
+0

Омг большое вам спасибо! Я получил его на работу !!!! @furas – user3000345

Смежные вопросы