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

אין פניית פרסה

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

נחש לא יכול לפנות ישר לאחור: הראש שלו ייכנס לצוואר של עצמו. לכן מתעלמים מפנייה לכיוון הנגדי.

הכיוון הנגדי של (dx, dy) הוא (-dx, -dy). בתנועה ימינה (1, 0), הכיוון הנגדי הוא שמאלה (-1, 0).

השוו לכיוון שבו הנחש נע בפעם האחרונה, ולא למקש האחרון שנלחץ. שתי לחיצות מהירות יכולות להתרחש באותה מסגרת: תנועה ימינה, ואז למעלה ואז שמאלה. הפנייה למעלה מותרת, ואם הכיוון שמאלה היה נבדק מול הכיוון למעלה, גם הוא היה מותר, והנחש היה פונה בחזרה לתוך עצמו. לכן זכרו את הכיוון בתחילת כל מסגרת:

while running:
    moving = direction
    for event in pygame.event.get():
        # ...
        turn = TURNS[event.key]
        if turn != (-moving[0], -moving[1]):
            direction = turn

כל פנייה אחרת מותרת, כולל לחיצה לכיוון שבו אתם כבר נעים, שאינה משנה דבר.

challenge icon

אתגר

קל
  1. בתור שורה ראשונה בתוך לולאת המשחק, הגדר moving = direction.
  2. שנה את הפנייה כך שמקש שמצביע בכיוון ההפוך ל־moving לא יעשה דבר. כל מקשי החצים האחרים עדיין יגרמו לנחש לפנות.

נסו בעצמכם

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:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key in TURNS:
            direction = TURNS[event.key]

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

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

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

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