Menu
CoddyTech

קירות

שיעור 26 מתוך 41 בקורס צרו משחקים עם 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 לפני הלולאה, והכנס את התנועה תחת if alive:.
  2. אם התא החדש (x, y) נמצא מחוץ לרשת, הגדר alive = False; אחרת הכנס, אכול או הסר כפי שעשית קודם.
  3. כאשר alive הוא false, הצג את Game over במרכז (240, 180).

לחץ על "שחק" ופגע בקיר: ההודעה Game over תופיע והנחש ייעצר. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

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

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

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