Menu
CoddyTech

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 berakhir

Kode pembaruan tetap berada di dalam if state == "play":, jadi tidak ada yang bergerak saat menu ditampilkan.

challenge icon

Tantangan

Mudah
  1. Mulai dengan state = "menu".
  2. Dalam perulangan event, saat tombol Enter ditekan dan state bernilai "menu", ubah nilainya menjadi "play".
  3. Saat state bernilai "menu", gambar hanya Meteor Dodge di tengah pada (240, 140) dan Press Enter to play di tengah pada (240, 200) dengan latar belakang gelap.
  4. 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()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Aturan Game

Latihan sendiri: Playground Pygame