2017-02-04 165 views
-2

我做了一個while循環和.blit()工作正常,但是當它到達if語句時,我的加載符號出現,似乎沒有任何工作。我正在做我的while循環嗎?我也希望我的menu1 == False觸發下一個while循環。爲什麼我的while循環中的任何if語句都不起作用?

#Importing Stuff 
import pygame 
import sys 
import time 
import random 
from pygame.locals import* 
pygame.init() 

#Naming Variables 
menu = 0 
color = (65,105,225) 
tcolor = (255,255,255) 
pcolor = (255,255,255) 
hcolor = (255,255,255) 
width, height = 1920, 1080 
screen = pygame.display.set_mode((width, height)) 
hecolor = (255,255,255) 
sys_font = pygame.font.SysFont \ 
      ("None", 60) 
menu1 = True 

#Initializing Screen 
pygame.display.set_caption("TSA Trend Game") 
screen.fill(((color))) 
pygame.display.update() 

#Making Menu 
while 1 == 1 and menu == 0: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     #More Variables 
     rendered = sys_font.render \ 
      ("Welcome to Trends of 2016!", True, ((tcolor))) 
     play = sys_font.render \ 
      ("Play Game", True, ((pcolor))) 
     help = sys_font.render \ 
      ("Help", True, ((hcolor))) 
     play_r = play.get_rect() 
     play_r.x, play_r.y = 710, 500 
     help_r = help.get_rect() 
     help_r.x, help_r.y = 1170, 500 
     render_r = play.get_rect() 
     render_r.x, render_r.y = 710, 500 
     #Display Text 
    while menu1 == True: 
     screen.blit(rendered, (710, 440)) 
     screen.blit(help, (1170, 500)) 
     screen.blit(play, (710, 500)) 
     pygame.display.update() 
     if render_r.collidepoint(pygame.mouse.get_pos()): 
      pcolor = (255,255,0) 
     else: 
      pcolor = (255,255,255) 
     if help_r.collidepoint(pygame.mouse.get_pos()): 
      hcolor = (255,255,0) 
     else: 
      hcolor = (255,255,255) 
     if event.type == pygame.MOUSEBUTTONDOWN and help_r.collidepoint(pygame.mouse.get_pos()): 
      menu1 == False 
    while menu1 == False: 
     screen.fill(color) 
     pygame.display.update() 

pygame.display.update() 
+1

'menu1 == False'是一個比較,評估爲'False'爲'True!= False',** not **一個任務。你也可以「打破」。 – jonrsharpe

+1

遊戲的每個狀態(菜單,選項,遊戲,幫助等)都應該有自己的循環幷包含:** 1 **。保持恆定幀速率的時鐘。 ** 2 **。事件循環。 ** 3 **。更新對象。 ** 4 **。 Blit /繪製物體。 ** ** 5。更新顯示。 [Here](http://stackoverflow.com/documentation/pygame/3959/getting-started-with-pygame/14697/a-simple-game#t=201702041456298336222)是一個簡單的演練。 –

+0

也許你需要'如果menu1 == True'而不是'while menu1 == True'。你也可以將它分成獨立的循環:http://imgur.com/MT7tZ4s – furas

回答

0

你需要

  • =而不是==menu1 = False
  • if menu1 == True,而不是while menu1 == True

但是你可以更好地組織代碼(或使用了分離mainloop菜單,遊戲和h ELP)。

import pygame 

# --- constants --- (UPPER_CASE names) 

BLACK = ( 0, 0, 0) 
WHITE = (255, 255, 255) 

WIDTH = 1920 
HEIGHT = 1080 

# --- main --- (lower_case namse) 

bg_color = (65,105,225) 

text_color = WHITE 
play_color = WHITE 
help_color = WHITE 

menu_background = (65, 105, 225) 
play_background = (255, 0, 0) 
help_background = ( 0, 255, 255) 

pygame.init() 

screen = pygame.display.set_mode((WIDTH, HEIGHT)) 
screen_rect = screen.get_rect() 

pygame.display.set_caption("TSA Trend Game") 

sys_font = pygame.font.SysFont(None, 60) 

# create only once 
render = sys_font.render("Welcome to Trends of 2016!", True, text_color) 
render_rect = render.get_rect(x=710, y=440) 

play = sys_font.render("Play Game", True, play_color) 
play_rect = play.get_rect(x=710, y=500) 

help = sys_font.render("Help", True, help_color) 
help_rect = help.get_rect(x=1170, y=500) 

other = sys_font.render("click mouse in any place", True, WHITE) 
other_rect = other.get_rect(center=screen_rect.center) 

# - mainloop - 

state_menu = True 
state_play = False 
state_help = False 

running = True 

while running: 

    # - events - 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 

     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_ESCAPE: 
       running = False 

     if state_menu: 
      if event.type == pygame.MOUSEBUTTONDOWN: 
       if help_rect.collidepoint(event.pos): 
        print("Help") 
        state_menu = False 
        state_help = True 
       elif play_rect.collidepoint(event.pos): 
        print("Play") 
        state_menu = False 
        state_play = True 

     elif state_play: 
      if event.type == pygame.MOUSEBUTTONDOWN: 
       state_menu = True 
       state_play = False 

     elif state_help: 
      if event.type == pygame.MOUSEBUTTONDOWN: 
       state_menu = True 
       state_help = False 

    # - updates - 

    if state_menu: 

     mouse_pos = pygame.mouse.get_pos() 

     if play_rect.collidepoint(mouse_pos): 
      play_color = (255,255,0) 
     else: 
      play_color = WHITE 

     if help_rect.collidepoint(mouse_pos): 
      help_color = (255,255,0) 
     else: 
      help_color = WHITE 

     play = sys_font.render("Play Game", True, play_color) 
     help = sys_font.render("Help", True, help_color) 

    elif state_play: 
     pass 
     # do something 

    elif state_help: 
     pass 
     # do something 

    # - draws - 

    if state_menu: 
     screen.fill(menu_background) 
     screen.blit(render, render_rect) 
     screen.blit(help, help_rect) 
     screen.blit(play, play_rect) 

    elif state_play: 
     screen.fill(play_background) 
     screen.blit(other, other_rect) 

    elif state_help: 
     screen.fill(help_background) 
     screen.blit(other, other_rect) 

    pygame.display.update() 


# - end - 

pygame.quit() 
exit()