הראשון שמגיע לחמש
שיעור 37 מתוך 41 בקורס צרו משחקים עם Pygame של Coddy.
השחקן הראשון שמגיע ל־5 נקודות מנצח. שמרו את שם המנצח במשתנה שמתחיל בתור None, הערך של Python שפירושו „עדיין כלום”:
winner = None
if left_score == 5:
winner = "Left player wins!"
elif right_score == 5:
winner = "Right player wins!"בדקו זאת באמצעות winner is None או winner is not None. אחרי שמישהו ניצח, הכדור ממשיך לחכות: מקש הרווח מגיש רק כאשר winner is None.
הציגו את המנצח במרכז ב־(300, 120), במקום הודעת ההגשה.
אתגר
בינוניסיימו את המשחק בחמש נקודות.
- לפני הלולאה, הגדירו
winner = None. אחרי הניקוד, הגדירו אותו ל-"Left player wins!"כאשרleft_score == 5, או ל-"Right player wins!"כאשרright_score == 5. - מקש הרווח מגיש רק כאשר
winner is None. - הציגו את המנצח במרכז ב-
(300, 120)במקוםPress Space to serve.
לחצו על "שחק": בחמש נקודות המנצח יוצג. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
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
waiting = False
running = True
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
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())
if not waiting:
ball.x += vx
ball.y += vy
if ball.top <= 0 or ball.bottom >= 400:
vy = -vy
if ball.colliderect(left):
vx = abs(vx)
vy = (ball.centery - left.centery) // 6
if ball.colliderect(right):
vx = -abs(vx)
vy = (ball.centery - right.centery) // 6
if ball.left > 600:
left_score += 1
ball.center = (300, 200)
vx = -vx
waiting = True
if ball.right < 0:
right_score += 1
ball.center = (300, 200)
vx = -vx
waiting = True
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)))
if waiting:
message = font.render("Press Space to serve", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(300, 360)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה צרו משחקים עם Pygame
4שני שחקנים וכדור
הכדורהקפצהתרגלו בעצמכם: Pygame אונליין