تزداد السرعة مع الوقت
الدرس 18 من 40 في دورة اصنع ألعابًا باستخدام Pygame على Coddy.
تصبح اللعبة أصعب مع استمرارها. هنا تسقط الكتل أسرع قليلًا كل 10 ثوانٍ.
تنشر pygame.time.set_timer(event_type, ms) حدثًا من ذلك النوع كل ms مللي ثانية. أنشئ نوع الحدث الخاص بك باستخدام pygame.USEREVENT، وهو رقم يتركه pygame متاحًا لك:
SPEED_UP = pygame.USEREVENT + 1
pygame.time.set_timer(SPEED_UP, 10000)
fall_speed = 3
for event in pygame.event.get():
if event.type == SPEED_UP:
fall_speed += 1يصل الحدث إلى حلقة الأحداث مع الأحداث الأخرى، مرة كل 10 ثوانٍ. بعد ذلك تسقط الكتلة باستخدام block.y += fall_speed بدلًا من سرعة ثابتة مقدارها 3. تبدأ اللعبة الجديدة ببطء من جديد، لذا يعيد التشغيل أيضًا تعيين fall_speed = 3.
التحدي
متوسط- أسفل الخط، عرّف
SPEED_UP = pygame.USEREVENT + 1وابدأ مؤقّتًا له كل 10000 مللي ثانية. - عيّن
fall_speed = 3قبل الحلقة واستخدمه للسقوط. - أضف 1 إلى
fall_speedعند وصول حدث SPEED_UP. - أعِده إلى 3 عندما يبدأ R لعبة جديدة.
جرّب بنفسك
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
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)
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 lives == 0 or score == 10:
again = font.render("Press R to play again", True, (240, 240, 240))
screen.blit(again, again.get_rect(center=(240, 200)))
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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس اصنع ألعابًا باستخدام Pygame
2الأحداث والتصادمات
السلةكتلة ساقطةتدرّب بنفسك: Playground لـ Pygame