Menu
CoddyTech
flag He iconעבריתdown icon

קירות

שיעור 26 מתוך 40 בקורס יוצרים משחקים עם Pygame של Coddy.

המשחק מסתיים כשהראש עומד לצאת מהלוח. תא נמצא על הלוח כאשר העמודה שלו היא מ־0 עד COLS - 1 והשורה שלו היא מ־0 עד ROWS - 1.

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:
        # הוסיפו, אכלו או הסירו, כמו קודם

שימו לב ל־x >= COLS, ולא ל־x > COLS: העמודות ממוספרות החל מ־0, ולכן העמודה COLS כבר נמצאת מעבר לקצה.

בדקו לפני שאתם זזים. הראש לעולם לא יוצא מהלוח, וברגע ש־alive הוא false הנחש נשאר במקום שבו היה. הציגו את Game over במרכז ב־(240, 180) כל עוד הוא false.

challenge icon

אתגר

בינוני
  1. הגדר alive = True לפני הלולאה.
  2. העבר את כל מהלך התנועה לתוך if alive:. חשב את x ואת y; אם התא הזה נמצא מחוץ ללוח, הגדר alive = False, אחרת הכנס, אכול או הסר כפי שעשית קודם.
  3. כאשר alive הוא false, הצג את Game over במרכז (240, 180).

נסו בעצמכם

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 iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יוצרים משחקים עם Pygame

תרגלו בעצמכם: Pygame אונליין