Bir Menü Ekranı
Coddy'nin Pygame Journey'sinin Oyun Kuralları bölümünün bir parçası. Ders 2 / 29.
Çoğu oyun bir menüyle açılır: bir başlık ve nasıl başlayacağını söyleyen bir satır. Menü, bir başka durumdur. state = "menu" ile başla ve bu durum devam ederken farklı bir ekran çiz.
Oyunu başlatmak için tek bir tuşa basmak yeterlidir; bu yüzden tuşu olaylardan oku. Bir KEYDOWN olayı her basışta bir kez gerçekleşir ve event.key hangi tuşa basıldığını söyler:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"state == "menu" kısmı önemlidir: Enter yalnızca menüdeyken başlatır. Daha sonra başka bir ekrandayken Enter'a basmak hiçbir şey yapmaz.
Artık çizim de duruma bağlıdır:
screen.fill((30, 30, 46))
if state == "menu":
# başlık ve oynamak için Enter tuşuna basın
else:
# oyuncu, kaya, skor, oyun bittiGüncelleme kodu hâlâ if state == "play": bloğunun altında olduğundan menü görünürken hiçbir şey hareket etmez.
Görev
Kolaystate = "menu"ile başla.- Olay döngüsünde, Enter tuşuna basıldığında ve durum
"menu"olduğunda, durumu"play"olarak ayarla. - Durum
"menu"iken, koyu arka plan üzerinde yalnızca (240, 140) konumunda ortalanmışMeteor Dodgeve (240, 200) konumunda ortalanmışPress Enter to playmetinlerini çiz. - Aksi hâlde oyunu önceki gibi çiz.
Kendin dene
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Oyun Kuralları bölümündeki tüm dersler
1Oyun Durumları
Bir Durum DeğişkeniBir Menü EkranıYeniden Oynamak için R'ye BasınBir Sıfırlama FonksiyonuHer Durum için Bir FonksiyonKendi başına pratik yap: Pygame playground