الجدران
الدرس 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.
التحدي
متوسط- اضبط
alive = Trueقبل الحلقة. - ضع الحركة بأكملها ضمن
if alive:. احسبxوy؛ إذا كانت تلك الخلية خارج الشبكة، فاضبطalive = False، وإلا فأدرج الخلية أو التهم الطعام أو احذف عنصرًا كما في السابق. - عندما تكون قيمة
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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس اصنع ألعابًا باستخدام Pygame
تدرّب بنفسك: Playground لـ Pygame