Aufschlag
Lektion 35 von 41 im Kurs Spiele mit Pygame erstellen von Coddy.
Nach einem Punkt sollte der Ball in der Mitte warten, bis ein Spieler bereit ist. Ein Flag gibt an, ob er wartet:
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
# Die Schläger bewegen sich immer
if not waiting:
# Der Ball bewegt sich, prallt ab und erzielt Punkte; ein Punkt setzt waiting = TrueDie Schläger bleiben außerhalb des if, damit die Spieler sich bereit machen können, während der Ball wartet. Die Leertaste löst pro Tastendruck nur einmal eine Aktion aus; deshalb stammt sie von einem KEYDOWN-Ereignis.
Während der Ball wartet, zeige unten in der Nähe den Hinweis Press Space to serve, zentriert bei (300, 360).
Aufgabe
MittelWarte nach jedem Punkt auf einen Aufschlag.
- Setze vor der Schleife
waiting = False. - Führe die Bewegung des Balls, die Abpraller und die Punktewertung unter
if not waiting:aus und setzewaiting = Truenach jedem Punkt. - Ein KEYDOWN von
pygame.K_SPACEsetztwaiting = False. Zeige während des WartensPress Space to servezentriert bei(300, 360)an.
Klicke auf „Spielen“ und verfehle den Ball: Er wartet in der Mitte, bis du die Leertaste drückst. Klicke dann auf „Prüfen“.
Probier es selbst
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()
Alle Lektionen in Spiele mit Pygame erstellen
Übe selbstständig: Pygame-Playground