הגיעו למטרה
שיעור 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, שום דבר לא מחזיר אותו לאחור, ולכן הרקע נשאר ירוק גם אם הריבוע יוצא מהמטרה.
אתגר
קלהפכו את המסך לירוק כשהריבוע מגיע למטרה.
- צרו את
won = Falseלפני הלולאה. הגדירו אותו ל-Trueכאשרx >= 420וגםy >= 300. - מלאו ב-
(40, 110, 70)כאשרwon, אחרת ב-(30, 30, 46). - ציירו את המטרה לפני הריבוע:
(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 אונליין