Menu
CoddyTech

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

שיעור 15 מתוך 41 בקורס צרו משחקים עם 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).

לחץ על "שחק" והחטא שלושה בלוקים: Game over מופיע והמשחק נעצר. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

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

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