Menu
CoddyTech

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 = turn

Belokan lainnya diizinkan, termasuk menekan tombol ke arah yang sedang dituju, yang tidak mengubah apa pun.

challenge icon

Tantangan

Mudah
  1. Sebagai baris pertama di dalam perulangan game, tetapkan moving = direction.
  2. Ubah logika berbelok agar tombol yang mengarah berlawanan dengan moving tidak 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()
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