Uma tela de menu
Parte da seção Regras do jogo do Journey de Pygame da Coddy. Lição 2 de 29.
A maioria dos jogos abre com um menu: um título e uma linha dizendo como começar. Um menu é mais um estado. Comece com state = "menu" e desenhe uma tela diferente enquanto ele estiver ativo.
Iniciar o jogo exige apenas o pressionamento de uma tecla, então leia essa informação dos eventos. Um evento KEYDOWN ocorre uma vez por pressionamento, e event.key indica qual tecla foi:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"A parte state == "menu" é importante: Enter significa iniciar apenas no menu. Depois, pressionar Enter em outra tela não faz nada.
Agora, o desenho também depende do estado:
screen.fill((30, 30, 46))
if state == "menu":
# o título e Pressione Enter para jogar
else:
# o jogador, a pedra, a pontuação, Fim de jogoO código de atualização continua dentro de if state == "play":, então nada se move enquanto o menu está sendo exibido.
Desafio
Fácil- Comece com
state = "menu". - No loop de eventos, quando Enter for pressionado e o estado for
"menu", defina-o como"play". - Enquanto o estado for
"menu", desenhe apenasMeteor Dodgecentralizado em (240, 140) ePress Enter to playcentralizado em (240, 200) sobre o fundo escuro. - Caso contrário, desenhe o jogo como antes.
Experimente você mesmo
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Meteor Dodge")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
state = "play"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if state == "play":
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 6
if keys[pygame.K_RIGHT]:
player.x += 6
player.clamp_ip(screen.get_rect())
rock.y += 4
if rock.top > 360:
rock.y = -24
rock.x = random.randint(0, 456)
score += 1
if rock.colliderect(player):
state = "over"
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 196, 0), player)
pygame.draw.rect(screen, (235, 80, 80), rock)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
if state == "over":
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Regras do jogo
1Estados do jogo
Uma variável de estadoUma tela de menuPressione R para jogar novamenteUma função de reinicializaçãoUma função por estadoPratique por conta própria: Playground de Pygame