2017-02-04 10 views
-2

Я сделал цикл while и .blit() работает нормально, но когда он добирается до операторов if, появляется мой знак загрузки и ничего не работает. Я неправильно выполняю свой цикл while? Я также хочу, чтобы мой menu1 == False запускал следующий цикл while.Почему бы ни одно из операторов if в моем цикле while работать?

#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/draw objects. ** 5 **. Обновите дисплей. [Здесь] (http://stackoverflow.com/documentation/pygame/3959/getting-started-with-pygame/14697/a-simple-game#t=201702041456298336222) - это простое пошаговое руководство. –

+0

возможно вам нужно 'if 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()