Servis
Coddy'nin Pygame Journey'sinin Projeler bölümünün bir parçası. Ders 17 / 31.
Bir sayıdan sonra top, oyunculardan biri hazır olana kadar ortada beklemelidir. Bekleyip beklemediğini bir bayrak belirtir:
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
# Raketler her zaman hareket eder
if not waiting:
# Top hareket eder, seker ve sayı kazandırır; sayı olduğunda waiting = True olurRakaların if bloğunun dışında kalması, top beklerken oyuncuların hazır olabilmesini sağlar. Boşluk tuşuna basma eylemi her basışta bir kez gerçekleşir, bu yüzden bir KEYDOWN olayından gelir.
Top beklerken, altta Press Space to serve mesajını (300, 360) konumunda ortalanmış şekilde göster.
Görev
Orta- Döngüden önce
waiting = Falseolarak ayarla. - Topun hareketini, sekmelerini ve skor alınmasını
if not waiting:bloğuna al ve her sayıdan sonrawaiting = Trueolarak ayarla. pygame.K_SPACEiçin bir KEYDOWN olayı,waiting = Falseolarak ayarlar.- Beklerken
Press Space to servemetnini(300, 360)konumunda ortalanmış olarak göster.
Kendin dene
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()
Projeler bölümündeki tüm dersler
Kendi başına pratik yap: Pygame playground