הגשה
שיעור 35 מתוך 41 בקורס צרו משחקים עם Pygame של Coddy.
אחרי נקודה, הכדור אמור להמתין במרכז עד שאחד השחקנים יהיה מוכן. דגל מציין אם הוא ממתין:
waiting = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
waiting = False
# המחבטים נעים תמיד
if not waiting:
# הכדור נע, קופץ ומזכה בנקודות; נקודה קובעת waiting = Trueהמחבטים נשארים מחוץ ל־if, כדי שהשחקנים יוכלו להתכונן בזמן שהכדור ממתין. מקש הרווח מפעיל פעולה פעם אחת בכל לחיצה, לכן האירוע מגיע מאירוע KEYDOWN.
בזמן שהכדור ממתין, הציגו בתחתית, במרכז, את Press Space to serve במיקום (300, 360).
אתגר
בינוניהמתינו להגשה אחרי כל נקודה.
- לפני הלולאה, הגדירו
waiting = False. - הכניסו את תנועת הכדור, הקפיצות והניקוד תחת
if not waiting:, והגדירוwaiting = Trueאחרי כל נקודה. - אירוע KEYDOWN של
pygame.K_SPACEמגדירwaiting = False. בזמן ההמתנה, הציגו אתPress Space to serveבמרכז(300, 360).
לחצו על "שחק" והחמיצו את הכדור: הוא ממתין באמצע עד שלוחצים על Space. ואז לחצו על "בדיקה".
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)
ball = pygame.Rect(293, 193, 14, 14)
vx, vy = 5, 4
left = pygame.Rect(20, 160, 12, 80)
right = pygame.Rect(568, 160, 12, 80)
left_score = 0
right_score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
left.y -= 6
if keys[pygame.K_s]:
left.y += 6
if keys[pygame.K_UP]:
right.y -= 6
if keys[pygame.K_DOWN]:
right.y += 6
left.clamp_ip(screen.get_rect())
right.clamp_ip(screen.get_rect())
ball.x += vx
ball.y += vy
if ball.top <= 0 or ball.bottom >= 400:
vy = -vy
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(vx)
if ball.left > 600:
left_score += 1
ball.center = (300, 200)
vx = -vx
if ball.right < 0:
right_score += 1
ball.center = (300, 200)
vx = -vx
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), left)
pygame.draw.rect(screen, (235, 80, 80), right)
pygame.draw.rect(screen, (255, 196, 0), ball)
score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
screen.blit(score, score.get_rect(center=(300, 30)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה צרו משחקים עם Pygame
תרגלו בעצמכם: Pygame אונליין