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)) هو مستطيل النص المصوَّر، موضوعًا بحيث يكون منتصفه عند (240, 160). عند الرسم باستخدام مستطيل، تُستخدم زاويته العلوية اليسرى، لذا يكون النص في المنتصف.

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()

جميع دروس حلقة اللعبة

تدرّب بنفسك: Playground لـ Pygame