Menu
CoddyTech

הארגז מסתיר את היהלום

חלק מהיחידה לולאת המשחק במסלול ה-Pygame של Coddy. שיעור 18 מתוך 35.

הארגז מצויר לפני אבן החן, ולכן אבן החן מוצגת מעליו. כדי שאבן החן תוכל להיות מוסתרת מתחת לארגז, ציירו את הארגז אחרי אבן החן: מה שמצויר אחרון מכסה את מה שכבר נמצא שם.

לחיצה על הארגז לא אמורה להגיע לבדיקת אבן החן ולתפוס אבן חן שהשחקן לא יכול לראות. שתי בדיקות if רצות. עם elif, השנייה רצה רק כשהראשונה הייתה שקרית, ולכן רק אחת מהן מקבלת את הלחיצה:

if crate.collidepoint(event.pos):
    dragging = True
elif gem.collidepoint(event.pos):
    print("Got it!")

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

קצה כהה יותר גורם לתיבה להיראות מוצקה. ציירו שוב את אותו Rect בצבע כהה יותר ועם רוחב, וכך יצויר רק קו המתאר שלו, מעל המילוי.

challenge icon

אתגר

קל

תן לארגז להסתיר את היהלום, ומנע מלחיצה עליו לאסוף את היהלום.

  1. העבר את שורת הציור של הארגז לאחר קווי המתאר של היהלום, ומתחתיה צייר שוב את crate בצבע (110, 70, 35) ובעובי 3, כדי ליצור את הקצה שלו.
  2. בענף MOUSEBUTTONDOWN, שנה את ה־if של היהלום ל־elif, אחרי הבדיקה של הארגז.

לחץ על "שחק", גרור את הארגז אל היהלום ולחץ עליו: היהלום נשאר מוסתר ולא מופיע סימן ורוד. ואז לחץ על "בדיקה".

נסו בעצמכם

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Hunt")
clock = pygame.time.Clock()

gem = pygame.Rect(225, 165, 30, 30)
crate = pygame.Rect(40, 230, 60, 60)
dragging = False
score = 0

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if crate.collidepoint(event.pos):
                dragging = True
            if gem.collidepoint(event.pos):
                score += 1
                gem.x = random.randint(15, 435)
                gem.y = random.randint(55, 315)
        elif event.type == pygame.MOUSEBUTTONUP:
            dragging = False
        elif event.type == pygame.MOUSEMOTION and dragging:
            crate.move_ip(event.rel)

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (150, 100, 50), crate)
    gem_points = [gem.midtop, gem.midright, gem.midbottom, gem.midleft]
    pygame.draw.polygon(screen, (80, 220, 255), gem_points)
    if gem.collidepoint(pygame.mouse.get_pos()):
        pygame.draw.rect(screen, (255, 196, 0), gem.inflate(10, 10), 2)
    for i in range(score):
        pygame.draw.rect(screen, (240, 110, 180), (10 + 10 * i, 14, 8, 8))
    mouse_x, mouse_y = pygame.mouse.get_pos()
    pygame.draw.circle(screen, (240, 240, 240), (mouse_x, mouse_y), 10, 2)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

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