Premi R per giocare ancora
Fa parte della sezione Regole di gioco del percorso Pygame di Coddy. Lezione 3 di 29.
Quando la partita finisce, il giocatore vuole riprovarci senza riavviare il programma. Aggiungi una riga alla schermata di fine partita e un tasto che avvii una nuova partita:
if event.key == pygame.K_r and state == "over":
player.x = 220
rock.y = -24
rock.x = random.randint(0, 456)
state = "play"Impostare di nuovo lo stato su "play" non basta. La roccia sta ancora toccando il giocatore, quindi il fotogramma successivo farebbe finire di nuovo la partita. Rimetti gli elementi che si sono mossi nelle posizioni iniziali di una nuova partita.
È lo stesso schema del menu: un tasto, un controllo dello stato corrente, un nuovo stato.
Sfida
Facile- Nella schermata di fine partita, sotto
Game over, mostraPress R to play againcentrato in (240, 200). - Quando premi R e lo stato è
"over": rimetti il giocatore in x 220, la roccia in y -24 con un valore x casuale da 0 a 456 e imposta lo stato su"play".
Provalo tu
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 = "menu"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"
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))
if state == "menu":
title = font.render("Meteor Dodge", True, (240, 240, 240))
screen.blit(title, title.get_rect(center=(240, 140)))
hint = font.render("Press Enter to play", True, (240, 240, 240))
screen.blit(hint, hint.get_rect(center=(240, 200)))
else:
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()
Tutte le lezioni di Regole di gioco
1Stati del gioco
Una variabile di statoUna schermata del menuPremi R per giocare ancoraUna funzione di resetUna funzione per statoEsercitati da solo: Playground Pygame