Menu
CoddyTech

احتساب النقاط

جزء من قسم حلقة اللعبة في رحلة Pygame على Coddy. الدرس 27 من 32.

النص في pygame عبارة عن صورة للكلمات. يحوّل pygame.font.Font سلسلة نصية إلى سطح، وترسم ذلك السطح باستخدام screen.blit.

font = pygame.font.Font(None, 32)

text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(text, (10, 10))

يمثّل Font(None, 32) الخط المضمّن في pygame، بارتفاع 32 بكسلًا. أنشئه مرة واحدة قبل الحلقة. ترسم render(text, True, color) الكلمات؛ وتنعّم True حوافها. تنسخ blit(surface, (x, y)) الصورة إلى الشاشة، بحيث تكون زاويتها العلوية اليسرى عند (x, y).

ارسم النص داخل الحلقة، بعد عملية الملء. تتغير النتيجة، والصورة التي أُنشئت مرة واحدة ستواصل عرض الرقم القديم.

challenge icon

التحدي

سهل
  1. قبل الحلقة، أنشئ font = pygame.font.Font(None, 32) وscore = 0.
  2. أضف 1 إلى score عندما تلتقط السلة كتلة.
  3. بعد رسم الكتلة، اعرض f"Score: {score}" باللون (240, 240, 240) وارسمه عند (10, 10).

جرّب بنفسك

import random
import pygame

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

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

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)
    if block.colliderect(basket):
        block.y = -20
        block.x = random.randint(0, 460)

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

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