הארגז מסתיר את היהלום
חלק מהיחידה לולאת המשחק במסלול ה-Pygame של Coddy. שיעור 18 מתוך 35.
הארגז מצויר לפני אבן החן, ולכן אבן החן מוצגת מעליו. כדי שאבן החן תוכל להיות מוסתרת מתחת לארגז, ציירו את הארגז אחרי אבן החן: מה שמצויר אחרון מכסה את מה שכבר נמצא שם.
לחיצה על הארגז לא אמורה להגיע לבדיקת אבן החן ולתפוס אבן חן שהשחקן לא יכול לראות. שתי בדיקות if רצות. עם elif, השנייה רצה רק כשהראשונה הייתה שקרית, ולכן רק אחת מהן מקבלת את הלחיצה:
if crate.collidepoint(event.pos):
dragging = True
elif gem.collidepoint(event.pos):
print("Got it!")בדקו קודם מה מצויר מעל. לחיצה על הארגז לא תגיע לעולם לאבן החן שמאחוריו.
קצה כהה יותר גורם לתיבה להיראות מוצקה. ציירו שוב את אותו Rect בצבע כהה יותר ועם רוחב, וכך יצויר רק קו המתאר שלו, מעל המילוי.
אתגר
קלתן לארגז להסתיר את היהלום, ומנע מלחיצה עליו לאסוף את היהלום.
- העבר את שורת הציור של הארגז לאחר קווי המתאר של היהלום, ומתחתיה צייר שוב את
crateבצבע(110, 70, 35)ובעובי3, כדי ליצור את הקצה שלו. - בענף
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()
כל השיעורים ביחידה לולאת המשחק
3העכבר
עקוב אחר הסמןלחץ על היהלוםתרגלו בעצמכם: Pygame אונליין