Tanpa Putar Balik
Pelajaran 22 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.
Ular tidak bisa langsung berbalik arah, karena kepalanya akan masuk ke lehernya sendiri. Jadi, belokan ke arah yang berlawanan diabaikan.
Arah yang berlawanan dari (dx, dy) adalah (-dx, -dy). Jika bergerak ke kanan (1, 0), arah yang berlawanan adalah ke kiri (-1, 0).
Bandingkan dengan arah gerak ular sebelumnya, bukan dengan tombol terbaru. Dua tekanan tombol yang cepat bisa terjadi dalam frame yang sama: bergerak ke kanan, lalu menekan Up dan Left. Up diizinkan, dan jika Left diperiksa terhadap Up, Left juga akan diizinkan, sehingga ular akan berbalik ke arah tubuhnya sendiri. Jadi, ingat arah pada awal setiap frame:
while running:
moving = direction
for event in pygame.event.get():
# ...
turn = TURNS[event.key]
if turn != (-moving[0], -moving[1]):
direction = turnBelokan lainnya diizinkan, termasuk menekan tombol ke arah yang sedang dituju, yang tidak mengubah apa pun.
Tantangan
Mudah- Sebagai baris pertama di dalam perulangan game, tetapkan
moving = direction. - Ubah logika berbelok agar tombol yang mengarah berlawanan dengan
movingtidak melakukan apa pun. Semua tombol panah lainnya tetap membuat ular berbelok.
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))
head = (5, 9)
direction = (1, 0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key in TURNS:
direction = TURNS[event.key]
head = (head[0] + direction[0], head[1] + direction[1])
screen.fill((30, 30, 46))
draw_cell(head, (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