Makanan
Pelajaran 24 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.
Makanan muncul di cell acak, tidak pernah di atas ular. Pilih cell acak dan coba lagi selama cell itu jatuh di tubuh ular:
def new_food(body):
while True:
cell = (random.randrange(COLS), random.randrange(ROWS))
if cell not in body:
return cellrandom.randrange(COLS) adalah bilangan bulat dari 0 hingga COLS - 1: setiap kolom, dan tidak pernah melewati tepinya. return mengakhiri fungsi dan perulangannya begitu cell kosong ditemukan.
cell not in body memeriksa seluruh list sekaligus.
Tantangan
Mudah- Tambahkan
import randomdi bagian atas. - Tulis
new_food(body)seperti di atas, di bawahdraw_cell. - Setelah
direction, aturfood = new_food(body). - Setelah pengisian, 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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Buat Game dengan Pygame
Latihan sendiri: Playground Pygame