الطعام
الدرس 24 من 41 في دورة اصنع ألعابًا باستخدام Pygame على Coddy.
يظهر الطعام في خلية عشوائية، وليس على الثعبان أبدًا. اختر خلية عشوائية وحاول مرة أخرى ما دامت تقع على جسم الثعبان:
def new_food(body):
while True:
cell = (random.randrange(COLS), random.randrange(ROWS))
if cell not in body:
return cellتعطي random.randrange(COLS) عددًا صحيحًا من 0 إلى COLS - 1: أي عمود، دون تجاوز الحافة أبدًا. تنهي return الدالة والحلقة معها بمجرد العثور على خلية فارغة.
يتحقق cell not in body من القائمة بأكملها دفعة واحدة.
التحدي
سهلضع الطعام على الشبكة.
- أضف
import randomفي الأعلى، وأضفnew_food(body)كما سبق، أسفلdraw_cell. - بعد
direction، عيّنfood = new_food(body). - بعد التعبئة، ارسم الطعام باللون الأحمر
(235, 80, 80).
اضغط على «العب»: ستظهر خلية حمراء في مكان ما بعيدًا عن الثعبان. ثم اضغط على «تحقق».
جرّب بنفسك
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))
body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 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))
body.pop()
screen.fill((30, 30, 46))
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
تدرّب بنفسك: Playground لـ Pygame