Makan dan Tumbuh
Pelajaran 25 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.
Ketika kepala baru mencapai makanan, ular memakannya. Cara menambah panjang ular adalah dengan mengurangi satu baris dari langkah yang sudah kamu miliki: pada langkah saat ular makan, lewati operasi pop, sehingga ekornya tetap.
body.insert(0, (x, y))
if (x, y) == food:
score += 1
food = new_food(body)
else:
body.pop()Tuple dibandingkan item demi item, jadi (x, y) == food bernilai true ketika kolom dan barisnya cocok.
Tampilkan skor seperti di game sebelumnya: buat font sebelum perulangan, lalu render f"Score: {score}" di setiap frame pada (8, 6).
Tantangan
Sedang- Sebelum perulangan, buat
font = pygame.font.Font(None, 32)danscore = 0. - Setelah menyisipkan kepala baru: jika berada di posisi makanan, tambahkan 1 ke skor dan tempatkan makanan baru; jika tidak, keluarkan ekornya.
- Render
f"Score: {score}"dalam(240, 240, 240)dan blit di(8, 6).
Coba sendiri
import random
import pygame
CELL = 20
COLS, ROWS = 24, 18
TURNS = {
pygame.K_LEFT: (-1, 0),
pygame.K_RIGHT: (1, 0),
pygame.K_UP: (0, -1),
pygame.K_DOWN: (0, 1),
}
pygame.init()
screen = pygame.display.set_mode((COLS * CELL, ROWS * CELL))
pygame.display.set_caption("Snake")
clock = pygame.time.Clock()
def draw_cell(cell, color):
col, row = cell
pygame.draw.rect(screen, color, (col * CELL + 1, row * CELL + 1, CELL - 2, CELL - 2))
def new_food(body):
while True:
cell = (random.randrange(COLS), random.randrange(ROWS))
if cell not in body:
return cell
body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 0)
food = new_food(body)
running = True
while running:
moving = direction
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key in TURNS:
turn = TURNS[event.key]
if turn != (-moving[0], -moving[1]):
direction = turn
x = body[0][0] + direction[0]
y = body[0][1] + direction[1]
body.insert(0, (x, y))
body.pop()
screen.fill((30, 30, 46))
draw_cell(food, (235, 80, 80))
for cell in body[1:]:
draw_cell(cell, (120, 220, 120))
draw_cell(body[0], (180, 255, 160))
pygame.display.flip()
clock.tick(10)
pygame.quit()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Buat Game dengan Pygame
Latihan sendiri: Playground Pygame