Menu
CoddyTech

Langit Penuh

Termasuk bagian Python di Jendela Game dalam perjalanan Pygame di Coddy. Pelajaran 32 dari 32.

Permainan berakhir saat langit memiliki dua puluh bintang. Ada dua hal yang berubah: klik berhenti menambahkan bintang, dan sebuah pesan menyatakan hal itu. Keduanya membaca list yang sama:

if event.type == pygame.MOUSEBUTTONDOWN and len(stars) < 20:
    stars.append(event.pos)
if len(stars) == 20:
    message = font.render("The sky is full!", True, (230, 230, 240))
    screen.blit(message, message.get_rect(center=(320, 240)))

message.get_rect(center=(320, 240)) adalah persegi panjang gambar teks, yang ditempatkan dengan titik tengahnya di (320, 240). Menempelkan teks di sana akan menempatkannya di tengah jendela, berapa pun panjangnya.

Uji == 20 di sini, bukan > 20: batasnya menghentikan list pada 20, jadi jumlahnya tidak pernah lebih banyak.

Saat langit sudah penuh, tidak ada lagi yang bisa dilakukan selain melihatnya. Bagian 2 menunjukkan cara memulai ulang permainan dengan sebuah tombol, dan cara mengakhiri permainan dengan kemenangan atau kekalahan.

challenge icon

Tantangan

Sedang

Selesaikan Night Sky:

  1. Tambahkan bintang saat diklik hanya jika len(stars) < 20.
  2. Saat len(stars) == 20, tampilkan The sky is full! dengan warna (230, 230, 240), di tengah pada (320, 240).

Coba sendiri

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# Siapkan semuanya di sini, sebelum perulangan game.
stars = []
font = pygame.font.Font(None, 36)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            stars.append(event.pos)

    # Ubah hal-hal di sini, sekali setiap frame.

    screen.fill((20, 24, 48))
    # Gambar di sini, setelah mengisi layar.
    pygame.draw.circle(screen, (240, 230, 160), (560, 80), 40)
    pygame.draw.rect(screen, (14, 16, 30), (0, 430, 640, 50))
    for star in stars:
        colour = (255, 255, 255)
        if random.randint(1, 30) == 1:
            colour = (110, 120, 170)
        pygame.draw.circle(screen, colour, star, 3)
    text = font.render(f"Stars: {len(stars)}/20", True, (230, 230, 240))
    screen.blit(text, (20, 20))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Semua pelajaran di Python di Jendela Game

Latihan sendiri: Playground Pygame