Menu
CoddyTech

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

חלק מהיחידה לולאת המשחק במסלול ה-Pygame של Coddy. שיעור 29 מתוך 32.

המשחק מסתיים. כאן מפסידים כשהחיים מגיעים ל־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). ציור על גבי 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()

כל השיעורים ביחידה לולאת המשחק

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