אוכל
שיעור 24 מתוך 41 בקורס צרו משחקים עם Pygame של Coddy.
האוכל מופיע בתא אקראי, אף פעם לא על הנחש. בוחרים תא אקראי ומנסים שוב כל עוד הוא נופל על הגוף:
def new_food(body):
while True:
cell = (random.randrange(COLS), random.randrange(ROWS))
if cell not in body:
return cellrandom.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
תרגלו בעצמכם: Pygame אונליין