为什么我的while循环中的任何if语句都不起作用?

时间:2017-02-04 14:31:04

标签: python while-loop pygame

我做了一个while循环并且.blit()工作正常,但当它到达if语句时,我的加载符号出现,似乎没有任何效果。我做错了吗?我还希望我的menu1 == False触发下一个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 个答案:

答案 0 :(得分:0)

你需要

  • =代替==
  • 中的menu1 = False
  • if menu1 == True代替while menu1 == True

但是你可以更好地组织代码(或者使用单独的mainloop来获取菜单,游戏和帮助。)

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()