Menu
CoddyTech

מסך תפריט

חלק מהיחידה חוקי המשחק במסלול ה-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":
    # הכותרת ו־Press Enter to play
else:
    # השחקן, הסלע, הניקוד, Game over

קוד העדכון עדיין נמצא תחת if state == "play":, ולכן שום דבר לא זז כשהתפריט מוצג.

challenge icon

אתגר

קל
  1. התחל עם state = "menu".
  2. בלולאת האירועים, כאשר לוחצים על Enter והמצב הוא "menu", הגדר אותו ל-"play".
  3. כאשר המצב הוא "menu", צייר רק את Meteor Dodge במרכז (240, 140) ואת Press Enter to play במרכז (240, 200) על הרקע הכהה.
  4. אחרת, צייר את המשחק כמו קודם.

נסו בעצמכם

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()
quiz iconבחנו את עצמכם

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

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

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