Bir Gövde Listesi
Coddy'nin Pygame ile Oyun Yap kursunda ders 23 / 40.
Yılan, başı ilk sırada olacak şekilde hücrelerden oluşan bir listedir:
body = [(5, 9), (4, 9), (3, 9)]Hareket etmek için yeni başı listenin başına ekle ve son hücreyi kaldır. Ortadaki tüm hücreler yerinde kalır, böylece gövde başı takip eder:
x = body[0][0] + direction[0]
y = body[0][1] + direction[1]
body.insert(0, (x, y))
body.pop()body.insert(0, item) öğeyi 0 indeksine yerleştirir. body.pop() son öğeyi kaldırır. body[0] baştır ve body[1:] geri kalanıdır.
Geri kalanını daha koyu yeşille, başı ise en son çiz ki üstte görünsün.
Görev
Kolayhead = (5, 9)ifadesinibody = [(5, 9), (4, 9), (3, 9)]ile değiştir.- Her karede,
body[0]değerinden yeni başı(x, y)hesapla, listenin başına ekle ve kuyruğu çıkar. body[1:]içindeki her hücreyi(120, 220, 120)rengiyle, ardındanbody[0]hücresini(180, 255, 160)rengiyle çiz.
Kendin dene
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:
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
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Pygame ile Oyun Yap bölümündeki tüm dersler
3Izgaralar ve Listeler
Hücrelerden Oluşan Bir IzgaraAdım AdımKendi başına pratik yap: Pygame playground