Titik Jangkar
Termasuk bagian Aturan Game dalam perjalanan Pygame di Coddy. Pelajaran 7 dari 29.
Skor yang digambar di (10, 10) dimulai dari tepi kiri. Agar posisinya berada di tepi kanan, kamu memerlukan lebarnya, dan lebar itu berubah seiring bertambahnya angka. Rect menghitung semuanya untukmu.
text.get_rect() menerima argumen kata kunci untuk titik mana pun: center, topleft, topright, midtop, midbottom, dan lainnya. Rect ditempatkan sehingga titik itu berada di lokasi yang kamu tentukan:
score_rect = score_text.get_rect(topright=(470, 10))
screen.blit(score_text, score_rect)Sekarang tepi kanan skor tetap berada di 470, baik nilainya 0 maupun 1000.
Teks di atas latar belakang yang ramai lebih mudah dibaca jika diletakkan di atas pelat. inflate(12, 8) menghasilkan salinan Rect yang lebarnya bertambah 12 piksel dan tingginya bertambah 8 piksel, dengan titik tengah yang sama. Gambar pelat terlebih dahulu, lalu teks di atasnya:
pygame.draw.rect(screen, PLATE, score_rect.inflate(12, 8))Tepi kanan pelat berada 6 piksel melewati teks, yaitu di 476, dan bagian atasnya berada 4 piksel di atas teks, yaitu di 6.
Tantangan
Sedang- Tambahkan
PLATE = (60, 60, 90). - Tempatkan skor dengan
topright=(470, 10)dan gambar persegi panjangPLATEdi belakangnya: Rect-nya diperbesar sebesar (12, 8). - Di menu, gambar persegi panjang
PLATEdi belakangMeteor Dodge: Rect judul, dipusatkan di (240, 140), diperbesar sebesar (24, 12).
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("assets/fonts/pixel.ttf", 24)
big_font = pygame.font.Font("assets/fonts/pixel.ttf", 48)
WHITE = (240, 240, 240)
def reset():
global player, rock, score
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
def draw_menu():
screen.fill((30, 30, 46))
title = big_font.render("Meteor Dodge", True, WHITE)
screen.blit(title, title.get_rect(center=(240, 140)))
hint = font.render("Press Enter to play", True, WHITE)
screen.blit(hint, hint.get_rect(center=(240, 200)))
def draw_game():
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, WHITE)
screen.blit(score_text, (10, 10))
def play_frame():
global score, state
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"
draw_game()
def draw_over():
draw_game()
message = big_font.render("Game over", True, WHITE)
screen.blit(message, message.get_rect(center=(240, 160)))
hint = font.render("Press R to play again", True, WHITE)
screen.blit(hint, hint.get_rect(center=(240, 200)))
reset()
state = "menu"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"
elif event.key == pygame.K_r and state == "over":
reset()
state = "play"
if state == "menu":
draw_menu()
elif state == "play":
play_frame()
else:
draw_over()
pygame.display.flip()
clock.tick(60)
pygame.quit()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Aturan Game
Latihan sendiri: Playground Pygame