شاشة قائمة
جزء من قسم قواعد اللعبة في رحلة Pygame على Coddy. الدرس 2 من 29.
تبدأ معظم الألعاب بقائمة: عنوان وسطر يخبرك بكيفية البدء. القائمة حالة إضافية. ابدأ بـ state = "menu" وارسم شاشة مختلفة ما دامت هذه الحالة قائمة.
بدء اللعبة لا يتطلب سوى ضغطة مفتاح واحدة، لذا اقرأها من الأحداث. يقع حدث KEYDOWN مرة واحدة عند كل ضغطة، ويخبرك event.key بالمفتاح الذي ضُغط:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"الجزء state == "menu" مهم: يعني مفتاح Enter البدء فقط عندما تكون القائمة معروضة. لاحقًا، لن يفعل الضغط على Enter شيئًا على شاشة أخرى.
يعتمد الرسم الآن على الحالة أيضًا:
screen.fill((30, 30, 46))
if state == "menu":
# العنوان واضغط على Enter للعب
else:
# اللاعب، والصخرة، والنتيجة، وانتهاء اللعبةيظل كود التحديث داخل if state == "play":، لذا لا يتحرك أي شيء أثناء عرض القائمة.
التحدي
سهل- ابدأ بـ
state = "menu". - في حلقة الأحداث، عند الضغط على مفتاح الإدخال وكانت الحالة
"menu"، غيّرها إلى"play". - ما دامت الحالة
"menu"، ارسم فقطMeteor Dodgeفي المنتصف عند (240, 140) وPress Enter to playفي المنتصف عند (240, 200) على الخلفية الداكنة. - وإلا، فارسم اللعبة كما في السابق.
جرّب بنفسك
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Meteor Dodge")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
state = "play"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if state == "play":
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 6
if keys[pygame.K_RIGHT]:
player.x += 6
player.clamp_ip(screen.get_rect())
rock.y += 4
if rock.top > 360:
rock.y = -24
rock.x = random.randint(0, 456)
score += 1
if rock.colliderect(player):
state = "over"
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 196, 0), player)
pygame.draw.rect(screen, (235, 80, 80), rock)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
if state == "over":
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس قواعد اللعبة
تدرّب بنفسك: Playground لـ Pygame