הגשה
חלק מהיחידה פרויקטים במסלול ה-Pygame של Coddy. שיעור 17 מתוך 31.
אחרי שלב מסוים, הכדור אמור להמתין באמצע עד שאחד השחקנים יהיה מוכן. דגל מציין אם הוא ממתין:
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).
נסו בעצמכם
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 אונליין