Layar Menu
Termasuk bagian Aturan Game dalam perjalanan Pygame di Coddy. Pelajaran 2 dari 29.
Kebanyakan game terbuka dengan menu: judul dan kalimat yang memberi tahu cara memulai. Menu adalah satu state lagi. Mulailah dengan state = "menu" dan gambar layar yang berbeda selama state itu aktif.
Memulai game hanya memerlukan satu kali menekan tombol, jadi baca tombol itu dari event. Event KEYDOWN muncul sekali setiap kali tombol ditekan, dan event.key menunjukkan tombol yang ditekan:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"Bagian state == "menu" penting: tombol Enter hanya memulai game saat menu ditampilkan. Setelah itu, menekan Enter di layar lain tidak melakukan apa pun.
Sekarang, gambar layar juga bergantung pada state:
screen.fill((30, 30, 46))
if state == "menu":
# judul dan tekan Enter untuk bermain
else:
# pemain, batu, skor, permainan berakhirKode pembaruan tetap berada di dalam if state == "play":, jadi tidak ada yang bergerak saat menu ditampilkan.
Tantangan
Mudah- Mulai dengan
state = "menu". - Dalam perulangan event, saat tombol Enter ditekan dan state bernilai
"menu", ubah nilainya menjadi"play". - Saat state bernilai
"menu", gambar hanyaMeteor Dodgedi tengah pada (240, 140) danPress Enter to playdi tengah pada (240, 200) dengan latar belakang gelap. - Jika tidak, gambar game seperti sebelumnya.
Coba sendiri
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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Aturan Game
1Status Game
Variabel StatusLayar MenuTekan R untuk Bermain LagiFungsi ResetSatu Fungsi untuk Setiap StatusLatihan sendiri: Playground Pygame