2012-12-21 14 views
2

나는 잠시 동안 진정한 루프에서 게임을 실행하고 있는데, 사용자에게 "Play again?"을 물어볼 수 있기를 원합니다. 나는 이미 텍스트로 팝업을위한 코드를 가지고 있지만 사용자가 rect를 클릭하거나 예를 들어 y를 치고 코드가 다시 자기를 실행하는 방법이 필요하다.파이 게임 재시작 하시겠습니까?

답변

1

실행에서 끝내고 끝내면 main()은 사용자에게 다시 재생할 것인지 묻습니다. 그렇다면 모든 것을 설정 한 후 기본 루프를 호출하십시오.

또는

그냥 다시 명확 묻는 부분이 기본적으로 거기에 기본값으로 모든 변수를 다시 초기화하고 사용자가 사용자가 RECT를 클릭하면 다시

0

말할하기 위해 재생하고자하는 경우 루프를하자, 마우스 위치에서 1 x 1 rect를 설정 한 다음 클릭 할 때 th 직사각형이 충돌하고 있습니다. 그런 다음 DeadChex와 마찬가지로 루프를 다시 자체 함수로 사용하여 루프를 호출하십시오.

0

특히이 기능을 실행 해보십시오. 그것을 당신의 마음의 내용에 맞게 조정하십시오. 플레이어가 죽으면 나는 이것이 당신이 찾고 있던 답 희망)

import pygame 
pygame.init() 

SCREEN_WIDTH = 600 
SCREEN_HEIGHT = 400 

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) 
bigfont = pygame.font.Font(None, 80) 
smallfont = pygame.font.Font(None, 45) 

def play_again(): 
    text = bigfont.render('Play again?', 13, (0, 0, 0)) 
    textx = SCREEN_WIDTH/2 - text.get_width()/2 
    texty = SCREEN_HEIGHT/2 - text.get_height()/2 
    textx_size = text.get_width() 
    texty_size = text.get_height() 
    pygame.draw.rect(screen, (255, 255, 255), ((textx - 5, texty - 5), 
               (textx_size + 10, texty_size + 
               10))) 

    screen.blit(text, (SCREEN_WIDTH/2 - text.get_width()/2, 
         SCREEN_HEIGHT/2 - text.get_height()/2)) 

    clock = pygame.time.Clock() 
    pygame.display.flip() 
    in_main_menu = True 
    while in_main_menu: 
     clock.tick(50) 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       in_main_menu = False 
       pygame.display.quit() 
       pygame.quit() 
       quit() 
      elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: 
       x, y = event.pos 
       if x >= textx - 5 and x <= textx + textx_size + 5: 
        if y >= texty - 5 and y <= texty + texty_size + 5: 
         in_main_menu = False 
         break 

play_again() 

pygame.display.quit() 
pygame.quit() 

(만 play_again 호출해야 (을하거나 놀이를 할 일이 무엇이든 다시 텍스트 나타납니다).

0

메인 프로그램 루프에서 플레이어가 게임을 다시 시작하기를 원하는 키에 대한 문을 if 문에 새 event.key로 만든 다음 if 문 내에서 main()을 호출하십시오. 그러면 모든 것이 다시 제곱 1로 재설정됩니다.

아래 예에서 사용자가 사망하고 R 키를 누른 다음 main()을 다시 시작하면이를 감지합니다.

# -------- Main Program Loop ----------- 
while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       player.go_left() 
      if event.key == pygame.K_RIGHT: 
       player.go_right() 
      if event.key == pygame.K_UP: 
       player.jump() 
      if event.key == pygame.K_SPACE: 
       player.shoot() 

      if event.key == pygame.K_r and not player.alive(): 
       main() 

메인 루프에서 아래로 내려 오면 플레이어가 다시 생성하기 위해 R 키를 누르라는 텍스트가 표시됩니다.

 if not player.alive(): 
     gameover = font.render("Press R to Respawn", False, (255, 255, 255)) 
     rect = gameover.get_rect() 
     rect.center = screen.get_rect().center 
     screen.blit(gameover, rect) 
0
나는이 생각할 수

: 내 예에서

play_again = 1 

while play_again: 
    play_again = int(raw_input("Play again? 0=No, 1=Yes")) 
    if play_again: 
     main() 
    else: 
     break 
     pygame.quit() 

내가에서 True을 넣어 그가 연주하고자하는 경우 사용자에게이 같은 것을 넣어 코드의 끝 부분에 끝 내 main() 루프의 끝 부분에서 main()이 모두 True을 반환하므로 사용자 입력이 1이고 종료가 0 인 경우 play_again 루프가 게임을 반복 할 수 있습니다. .

0

exec() 함수를 사용하여 프로세스를 단순화 할 수 있습니까?

다음은 유사한 문제에 대한 제 응답의 예입니다. 나는 이것을 당신의 루프에서도 사용할 수 있다고 생각합니다.

Simply Python Game Restart Code