קירות
שיעור 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הוא false, הצג את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
תרגלו בעצמכם: Pygame אונליין