Menu
CoddyTech
flag He iconעבריתdown icon

ניצחון או הפסד

שיעור 15 מתוך 40 בקורס יוצרים משחקים עם Pygame של Coddy.

המשחק מסתיים. כאן מפסידים כשהחיים מגיעים ל־0 ומנצחים כשהניקוד מגיע ל־10. כל עוד אף אחד מהדברים האלה לא קרה, המשחק נמשך.

הכניסו את כל מה שזז תחת תנאי אחד, כדי שיפסיק כשהמשחק מסתיים:

if lives > 0 and score < 10:
    # מקשים, הסל, הבלוק, תפיסות והחטאות

הציור נשאר מחוץ ל־if: המסך עדיין מציג את הפריים האחרון, ומעליו את התוצאה.

if lives == 0:
    message = font.render("Game over", True, (240, 240, 240))
    screen.blit(message, message.get_rect(center=(240, 160)))

message.get_rect(center=(240, 160)) הוא ה־Rect של תמונת הטקסט, שממוקמת כך שמרכזה נמצא ב־(240, 160). הצבה באמצעות blit ב־Rect משתמשת בפינה השמאלית העליונה שלו, ולכן הטקסט ממורכז.

challenge icon

אתגר

בינוני
  1. הזח פנימה את כל מה שזז (המקשים, הסל, הבלוק, התפיסות וההחטאות) תחת if lives > 0 and score < 10:.
  2. אחרי ציור הניקוד ומספר החיים, הצג את Game over כאשר lives == 0, או את You win! כאשר score == 10, במרכז (240, 160).

נסו בעצמכם

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    block.y += 3
    if block.top > 360:
        block.y = -20
        block.x = random.randint(0, 460)
        lives -= 1
    if block.colliderect(basket):
        block.y = -20
        block.x = random.randint(0, 460)
        score += 1

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
    screen.blit(lives_text, (370, 10))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יוצרים משחקים עם Pygame

תרגלו בעצמכם: Pygame אונליין