Menu
CoddyTech

Makanan

Termasuk bagian Proyek dalam perjalanan Pygame di Coddy. Pelajaran 6 dari 31.

Makanan muncul di cell acak, tidak pernah di tubuh ular. Pilih cell acak dan coba lagi selama cell itu berada di tubuh ular:

def new_food(body):
    while True:
        cell = (random.randrange(COLS), random.randrange(ROWS))
        if cell not in body:
            return cell

random.randrange(COLS) adalah bilangan bulat dari 0 hingga COLS - 1: setiap kolom, dan tidak pernah satu kolom melewati tepinya. return mengakhiri fungsi dan perulangannya segera setelah cell kosong ditemukan.

cell not in body memeriksa seluruh list sekaligus.

challenge icon

Tantangan

Mudah
  1. Tambahkan import random di bagian atas.
  2. Tulis new_food(body) seperti di atas, di bawah draw_cell.
  3. Setelah direction, atur food = new_food(body).
  4. Setelah mengisi layar, gambar makanan dengan warna merah (235, 80, 80).

Coba sendiri

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


body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 0)

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

Latihan sendiri: Playground Pygame