קירות
חלק מהיחידה פרויקטים במסלול ה-Pygame של Coddy. שיעור 8 מתוך 31.
המשחק מסתיים כשהראש עומד לצאת מהלוח. תא נמצא על הלוח כשהעמודה שלו היא בין 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 אונליין