Menu
CoddyTech

הגיעו למטרה

שיעור 8 מתוך 41 בקורס צרו משחקים עם Pygame של Coddy.

למשחק דרושה מטרה. ציירו ריבוע ירוק בפינה הימנית התחתונה, וכשהריבוע של השחקן נכנס אליו, השחקן מנצח.

המטרה נמצאת ב־(420, 300) וגודלה 60 על 60. הריבוע של השחקן נמצא בתוך המטרה כשהצד השמאלי שלו נמצא ב־420 או יותר והחלק העליון שלו ב־300 או יותר. שני התנאים חייבים להתקיים, לכן חברו ביניהם באמצעות and.

הניצחון חייב להישאר בתוקף. שמרו אותו במשתנה שמתחיל ב־False והופך ל־True רק פעם אחת:

won = False

while running:
    # הזיזו את הריבוע
    if x >= 420 and y >= 300:
        won = True
    if won:
        screen.fill((40, 110, 70))
    else:
        screen.fill((30, 30, 46))

ברגע ש־won מקבל את הערך True, שום דבר לא מחזיר אותו לאחור, ולכן הרקע נשאר ירוק גם אם הריבוע יוצא מהמטרה.

challenge icon

אתגר

קל

הפכו את המסך לירוק כשהריבוע מגיע למטרה.

  1. צרו את won = False לפני הלולאה. הגדירו אותו ל-True כאשר x >= 420 וגם y >= 300.
  2. מלאו ב-(40, 110, 70) כאשר won, אחרת ב-(30, 30, 46).
  3. ציירו את המטרה לפני הריבוע: (60, 200, 120) במיקום (420, 300, 60, 60).

לחצו על "שחק" ונווטו אל המטרה: הרקע יהפוך לירוק. לאחר מכן לחצו על "בדיקה".

נסו בעצמכם

import pygame

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

x, y = 220, 160

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    speed = 4
    if keys[pygame.K_SPACE]:
        speed = 8
    if keys[pygame.K_LEFT]:
        x -= speed
    if keys[pygame.K_RIGHT]:
        x += speed
    if keys[pygame.K_UP]:
        y -= speed
    if keys[pygame.K_DOWN]:
        y += speed

    x = max(0, min(x, 480 - 40))
    y = max(0, min(y, 360 - 40))

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (255, 196, 0), (x, y, 40, 40))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

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