لا انعطافات للخلف
الدرس 22 من 41 في دورة اصنع ألعابًا باستخدام 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يُسمح بكل الانعطافات الأخرى، بما في ذلك الضغط على المفتاح الموافق للاتجاه الذي تتحرك فيه بالفعل، وهذا لا يغيّر شيئًا.
التحدي
سهلامنع الثعبان من الالتفاف على نفسه.
- في أول سطر داخل حلقة اللعبة، عيّن
moving = direction. - اجعل المفتاح الذي يشير إلى الاتجاه المعاكس لـ
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()
جميع دروس اصنع ألعابًا باستخدام Pygame
3الشبكات والقوائم
شبكة من الخلاياخطوة بخطوةتدرّب بنفسك: Playground لـ Pygame