كُلْ وانمُ
الدرس 25 من 41 في دورة اصنع ألعابًا باستخدام 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).
التحدي
متوسطاجعل الثعبان يأكل وينمو.
- قبل الحلقة، أنشئ
font = pygame.font.Font(None, 32)وscore = 0. - بعد إدراج الرأس الجديد: إذا كان على الطعام، فأضف 1 إلى النتيجة وضع طعامًا جديدًا؛ وإلا فأزل الذيل.
- اعرض
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()
جميع دروس اصنع ألعابًا باستخدام Pygame
3الشبكات والقوائم
شبكة من الخلاياخطوة بخطوةتدرّب بنفسك: Playground لـ Pygame