Menu
CoddyTech

Duvarlar

Coddy'nin Pygame ile Oyun Yap kursunda ders 26 / 40.

Kafa ızgaranın dışına çıkacak olduğunda oyun sona erer. Bir hücrenin sütunu 0 ile COLS - 1 arasında ve satırı 0 ile ROWS - 1 arasında olduğunda hücre ızgaranın içindedir.

if alive:
    x = body[0][0] + direction[0]
    y = body[0][1] + direction[1]
    if x < 0 or x >= COLS or y < 0 or y >= ROWS:
        alive = False
    else:
        # önceki gibi insert, eat veya pop işlemlerini yap

x > COLS değil, x >= COLS olduğuna dikkat edin: sütunlar 0'dan başlayarak numaralandırılır, bu nedenle COLS sütunu zaten kenarın dışındadır.

Hareket etmeden önce test edin. Kafa hiçbir zaman ızgaranın dışına çıkmaz ve alive false olduktan sonra yılan bulunduğu yerde kalır. alive false iken Game over yazısını (240, 180) konumunda ortalanmış olarak gösterin.

challenge icon

Görev

Orta
  1. Döngüden önce alive = True ayarlayın.
  2. Tüm hareketi if alive: koşulunun içine alın. x ve y değerlerini hesaplayın; bu hücre ızgaranın dışındaysa alive = False ayarlayın, aksi takdirde önceki gibi ekleyin, yiyin veya çıkarın.
  3. alive false olduğunda, Game over mesajını (240, 180) konumunda ortalanmış şekilde gösterin.

Kendin dene

import random
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()
font = pygame.font.Font(None, 32)


def draw_cell(cell, color):
    col, row = cell
    pygame.draw.rect(screen, color, (col * CELL + 1, row * CELL + 1, CELL - 2, CELL - 2))


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


body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 0)
food = new_food(body)
score = 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))
    if (x, y) == food:
        score += 1
        food = new_food(body)
    else:
        body.pop()

    screen.fill((30, 30, 46))
    draw_cell(food, (235, 80, 80))
    for cell in body[1:]:
        draw_cell(cell, (120, 220, 120))
    draw_cell(body[0], (180, 255, 160))
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (8, 6))
    pygame.display.flip()
    clock.tick(10)

pygame.quit()
quiz iconKendini test et

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

Kendi başına pratik yap: Pygame playground