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

שחק שוב

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

אחרי שהמשחק מסתיים, השחקן לא אמור להצטרך להפעיל מחדש את התוכנית. לחצו על R כדי להתחיל משחק חדש: החזירו כל ערך שהשתנה למצב ההתחלתי שלו.

elif event.key == pygame.K_r and (lives == 0 or score == 10):
    score = 0
    lives = 3
    basket.x = 200
    block.y = -20
    block.x = random.randint(0, 460)

התנאי חשוב. בלי (lives == 0 or score == 10), לחיצה על R תאפס את הניקוד באמצע המשחק. הסוגריים מקבצים את שני מצבי הסיום, כך ש-and חל על שניהם.

ציינו לשחקן על איזה מקש ללחוץ: הציגו את Press R to play again מתחת לתוצאה.

challenge icon

אתגר

בינוני
  1. בענף KEYDOWN, כאשר המקש הוא pygame.K_r והמשחק הסתיים, יש להגדיר את הניקוד ל־0, את מספר החיים ל־3, את basket.x ל־200, ולהפיל בלוק חדש מ־y = -20 במיקום x אקראי.
  2. כאשר המשחק הסתיים, יש להציג גם את Press R to play again במרכז (240, 200).

נסו בעצמכם

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
paused = False

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_p:
                paused = not paused

    if lives > 0 and score < 10 and not paused:
        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))
    if lives == 0:
        message = font.render("Game over", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    elif score == 10:
        message = font.render("You win!", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    if paused:
        message = font.render("Paused", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    pygame.display.flip()
    clock.tick(60)

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

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

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

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