ספירה באמצעות while
חלק מהיחידה Python בחלון משחק במסלול ה-Pygame של Coddy. שיעור 19 מתוך 32.
לולאת while חוזרת כל עוד התנאי שלה נכון. השתמשו בה כשלא ידוע מראש כמה פעמים צריך לחזור:
radius = 200
rings = 0
while radius > 10:
pygame.draw.circle(screen, (150, 190, 255), (320, 240), radius, 2)
radius = radius // 2
rings = rings + 1הרדיוס נחצה בכל פעם: 200, 100, 50, 25, 12. // מחלק ומסיר את מה שאחרי הנקודה, ולכן 25 // 2 הוא 12. אחר כך הוא הופך ל־6, התנאי אינו נכון, והלולאה מסתיימת אחרי 5 טבעות. rings סופר אותן. המספר החמישי בקריאה לעיגול, 2, מצייר קו מתאר ברוחב 2 פיקסלים במקום עיגול מלא.
גם לולאת המשחק היא לולאת while, והיא פועלת עד שסוגרים את החלון. לולאת while בתוך פריים חייבת להסתיים במהירות, אחרת הפריים לא יסתיים לעולם. אם משמיטים את השורה שחוצה את הרדיוס, התנאי נשאר נכון לנצח: המשחק קופא, והבדיקה מציינת שהמשחק מעולם לא הגיע לפריים הראשון שלו.
אתגר
בינוניבחלק הציור, החליפו את הטבעת היחידה בלולאת while:
- התחילו עם
radius = 200ועםrings = 0. - כל עוד
radius > 10: ציירו טבעת מתאר בצבע(150, 190, 255), ברוחב 2, שמרכזה ב-(320, 240); חלקו את הרדיוס ב-2 באמצעות//; הוסיפו 1 ל-rings. - אחרי הלולאה, הציגו את
f"Rings: {rings}"בנקודה (20, 20). היא מציגהRings: 5.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()
# הגדירו כאן את הדברים, לפני לולאת המשחק.
font = pygame.font.Font(None, 36)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# שנו כאן דברים, פעם אחת בכל פריים.
screen.fill((20, 24, 48))
# ציירו כאן, אחרי מילוי המסך.
pygame.draw.circle(screen, (150, 190, 255), (320, 240), 200, 2)
text = font.render("Rings: 1", True, (230, 230, 240))
screen.blit(text, (20, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה Python בחלון משחק
תרגלו בעצמכם: Pygame אונליין