Menu
CoddyTech

Yemek

Coddy'nin Pygame ile Oyun Yap kursunda ders 24 / 41.

Yemek rastgele bir hücrede belirir, asla yılanın üzerinde olmaz. Rastgele bir hücre seç ve yılanın gövdesine denk geldiği sürece tekrar dene:

def new_food(body):
    while True:
        cell = (random.randrange(COLS), random.randrange(ROWS))
        if cell not in body:
            return cell

random.randrange(COLS), 0'dan COLS - 1'e kadar bir tam sayıdır: her sütunu kapsar ve asla sınırın bir ötesine geçmez. Boş bir hücre bulunduğu anda return işlevi ve onunla birlikte döngüyü sona erdirir.

cell not in body listenin tamamını tek seferde kontrol eder.

challenge icon

Görev

Kolay

Izgaraya yiyecek koy.

  1. En üste import random ekle ve yukarıdaki gibi new_food(body) işlevini draw_cell işlevinin altına ekle.
  2. direction değişkeninden sonra food = new_food(body) ifadesini ekle.
  3. Ekranı doldurduktan sonra yiyeceği kırmızı renkte (235, 80, 80) çiz.

“Oyna” düğmesine bas: yılanın dışında bir yerde kırmızı bir hücre belirir. Ardından “Kontrol et” düğmesine bas.

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))


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()

Pygame ile Oyun Yap bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground