Menu
CoddyTech

Menang atau Kalah

Pelajaran 15 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.

Permainan berakhir. Kamu kalah saat nyawa mencapai 0 dan menang saat skor mencapai 10. Selama keduanya belum terjadi, permainan tetap berlangsung.

Letakkan semua yang bergerak di bawah satu kondisi, agar berhenti saat permainan berakhir:

if lives > 0 and score < 10:
    # tombol, keranjang, balok, tangkapan, dan kegagalan menangkap

Proses menggambar tetap berada di luar if: layar tetap menampilkan frame terakhir, dan hasilnya di atas frame tersebut.

if lives == 0:
    message = font.render("Game over", True, (240, 240, 240))
    screen.blit(message, message.get_rect(center=(240, 160)))

message.get_rect(center=(240, 160)) adalah Rect gambar teks yang ditempatkan dengan titik tengahnya di (240, 160). Blitting pada Rect menggunakan sudut kiri atasnya, sehingga teks berada di tengah.

challenge icon

Tantangan

Sedang
  1. Indentasikan semua yang bergerak (tombol, keranjang, blok, tangkapan, dan kegagalan menangkap) di bawah if lives > 0 and score < 10:.
  2. Setelah menggambar skor dan nyawa, tampilkan Game over ketika lives == 0, atau You win! ketika score == 10, di tengah pada (240, 160).

Coba sendiri

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3

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

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    block.y += 3
    if block.top > 360:
        block.y = -20
        block.x = random.randint(0, 460)
        lives -= 1
    if block.colliderect(basket):
        block.y = -20
        block.x = random.randint(0, 460)
        score += 1

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
    screen.blit(lives_text, (370, 10))
    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 Buat Game dengan Pygame

Latihan sendiri: Playground Pygame