2014-01-20 5 views
0

По какой-то странной причине (я вроде как новый для python/pygame) этот цикл не загружает другой. У меня это так, что есть два игрока. Он начинается с одного игрока в цикле while, а затем, как только игрок делает это, он поворачивает второй, пока цикл равен true и так далее. Но как только второй цикл завершен, он не превращает первый в true, а только листья заканчивают программу.Почему этот цикл не повторяется?

Loop один:

game = True 
while game: 
    for event in pygame.event.get(): 
     pygame.event.get() 

     if event.type == pygame.KEYDOWN and event.key == pygame.K_a: 
      count1 = pygame.draw.circle(window, (255, 255, 255),(200, countY - 100), 25, 0) 
      game = False 
      game2 = True 
      print("Test") 
      pygame.display.update() 

Loop два (Это должно повернуть первую петлю, чтобы верно, когда "J" нажата):

while game2: 
    for event in pygame.event.get(): 
     pygame.event.get() 

     if event.type == pygame.KEYDOWN and event.key == pygame.K_j: 
      count3 = pygame.draw.circle(window, (255, 255, 255),(500, countY - 100), 25, 0) 
      game2 = False 
      game = True 
      print("Test third") 
      pygame.display.update() 

ответ

3

Вы должны были бы другой петлю над два while game и while game2 петли:

while True: 
    while game: 
     # 

    while game2: 
     # 

Теперь, когда game2 заканчивается, крайняя линия while возвращается к первому циклу while game.

Окончание игры потребует, чтобы вы вырвались из цикла while True; вы можете использовать ключевое слово break для этого, выполненное за пределами любой из петель while game или while game2.

+0

Спасибо так много: D – user3216654

+0

Да, жаль, что я не делал это раньше, но не было лимит времени, прежде чем я смог это сделать. еще раз, спасибо. – user3216654

1

while Петли в Python не постоянно проверяют, чтобы их состояние было True.

game В то время как цикл выполняется, как вы уже сказали, до цикла game2.

while game: 
    # do stuff 

while game2: 
    # do stuff 

Когда game2 наборы game в Правда, это не означает, что while game цикл начнется снова выполняется. Тело цикла while и его рекурсии выполняются только один раз. Python продолжит выполнение остальной части скрипта и завершение. Без какого-либо другого потока управления невозможно, чтобы цикл while game был выполнен снова.

Другая альтернатива - превратить game и game2 в функции и вызвать их в других функциях, когда их игры должны начинаться.

Если выполнение game2 предполагается до конца один раз game начинается, то что-то вроде этого будет достаточно:

def game(): 
    while True: 
     for event in pygame.event.get(): 
      pygame.event.get() 
      if event.type == pygame.KEYDOWN and event.key == pygame.K_a: 
       count1 = pygame.draw.circle(window, (255, 255, 255),(200, countY - 100), 25, 0) 
       game2() # Begin player 2 game 
       print("Test") 
       pygame.display.update() 
       return # Stop execution of game() 

def game2(): 
    while True: 
     for event in pygame.event.get(): 
      pygame.event.get() 
      if event.type == pygame.KEYDOWN and event.key == pygame.K_j: 
       count3 = pygame.draw.circle(window, (255, 255, 255),(500, countY - 100), 25, 0) 
       game() # Begin player 1 game 
       print("Test third") 
       pygame.display.update() 
       return 
+0

Это хорошо, однако Мартин Пьетер, вероятно, сделал это более питоническим образом. – KodyVanRy

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