הראשון לחמש
שיעור 37 מתוך 40 בקורס יוצרים משחקים עם 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. - אחרי הניקוד, הגדירו את
winnerלערך"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 אונליין