ممنوع الاستدارة للخلف
الدرس 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يُسمح بكل الانعطافات الأخرى، بما في ذلك الضغط على المفتاح الموافق للاتجاه الذي تتحرك فيه بالفعل، وهذا لا يغيّر شيئًا.
التحدي
سهل- بوصفه السطر الأول داخل حلقة اللعبة، عيّن
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