Menu
CoddyTech

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).

challenge icon

Tantangan

Sedang
  1. Sebelum perulangan, buat font = pygame.font.Font(None, 32) dan score = 0.
  2. Setelah menyisipkan kepala baru: jika berada di posisi makanan, tambahkan 1 ke skor dan tempatkan makanan baru; jika tidak, keluarkan ekornya.
  3. 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()
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