Jangan Putar Balik
Termasuk bagian Proyek dalam perjalanan Pygame di Coddy. Pelajaran 4 dari 31.
Ular tidak bisa berbelok lurus ke belakang: 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 tombol yang ditekan dengan cepat bisa terdeteksi dalam frame yang sama: bergerak ke kanan, lalu tekan Atas dan Kiri. Atas diperbolehkan, dan jika Kiri dibandingkan dengan Atas, Kiri juga akan diperbolehkan, sehingga ular akan berbelok kembali ke 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 = turnSemua belokan lainnya diperbolehkan, termasuk menekan tombol ke arah yang sudah dituju, yang tidak mengubah apa pun.
Tantangan
Mudah- Sebagai baris pertama di dalam perulangan game, atur
moving = direction. - Ubah logika belok agar tombol yang mengarah berlawanan dengan
movingtidak melakukan apa pun. Semua tombol panah lainnya tetap membelokkan ular.
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 Proyek
Latihan sendiri: Playground Pygame