Menu
CoddyTech

Menang atau Kalah

Termasuk bagian Perulangan Game dalam perjalanan Pygame di Coddy. Pelajaran 29 dari 32.

Permainan berakhir. Kamu kalah ketika jumlah nyawa mencapai 0 dan menang ketika skor mencapai 10. Selama keduanya belum terjadi, permainan masih berlangsung.

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

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

Penggambaran tetap berada di luar if: layar tetap menampilkan bingkai terakhir, lalu hasilnya di atas bingkai itu.

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 posisinya diatur dengan titik tengah 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, balok, tangkapan, dan kegagalan) di bawah if lives > 0 and score < 10:.
  2. Setelah menggambar skor dan nyawa, tampilkan Game over saat lives == 0, atau You win! saat 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()

Semua pelajaran di Perulangan Game

Latihan sendiri: Playground Pygame