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

الجدران

الدرس 26 من 40 في دورة اصنع ألعابًا باستخدام 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 قبل الحلقة.
  2. ضع الحركة بأكملها ضمن if alive:. احسب x وy؛ إذا كانت تلك الخلية خارج الشبكة، فاضبط alive = False، وإلا فأدرج الخلية أو التهم الطعام أو احذف عنصرًا كما في السابق.
  3. عندما تكون قيمة alive خاطئة، اعرض Game over في المنتصف عند (240, 180).

جرّب بنفسك

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()
quiz iconاختبر نفسك

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

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

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