Menu
CoddyTech
flag Ar iconالعربيةdown icon

كُلْ وانمُ

الدرس 25 من 40 في دورة اصنع ألعابًا باستخدام Pygame على Coddy.

عندما يصل الرأس الجديد إلى الطعام، تأكله الأفعى. النمو هو الحركة التي لديك بالفعل، مع حذف سطر واحد: في الخطوة التي تأكل فيها الأفعى، تخطَّ عملية الإزالة، وسيبقى الذيل في مكانه.

body.insert(0, (x, y))
if (x, y) == food:
    score += 1
    food = new_food(body)
else:
    body.pop()

تُقارَن الصفوف عنصرًا بعنصر، لذا تكون (x, y) == food صحيحة عندما يتطابق كلٌّ من العمود والصف.

اعرض النتيجة كما في اللعبة السابقة: خطٌّ يُنشأ قبل الحلقة، وf"Score: {score}" يُرسم في كل إطار عند (8, 6).

challenge icon

التحدي

متوسط
  1. قبل الحلقة، أنشئ font = pygame.font.Font(None, 32) وscore = 0.
  2. بعد إدراج الرأس الجديد: إذا كان على الطعام، أضف 1 إلى النتيجة وضع طعامًا جديدًا؛ وإلا فأزل الذيل.
  3. اعرض f"Score: {score}" باللون (240, 240, 240) وارسمه عند (8, 6).

جرّب بنفسك

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


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)

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))
    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))
    pygame.display.flip()
    clock.tick(10)

pygame.quit()
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس اصنع ألعابًا باستخدام Pygame

تدرّب بنفسك: Playground لـ Pygame