Menu
CoddyTech

Zurück zur Mitte

Lektion 33 von 41 im Kurs Spiele mit Pygame erstellen von Coddy.

Wenn ein Spieler den Ball verfehlt, verlässt der Ball das Fenster auf seiner Seite. Bring ihn zurück in die Mitte und schicke ihn in Richtung der anderen Seite.

if ball.right < 0 or ball.left > 600:
    ball.center = (300, 200)
    vx = -vx

ball.right < 0 bedeutet, dass sich der ganze Ball hinter dem linken Rand befindet, und ball.left > 600, dass sich der ganze Ball hinter dem rechten Rand befindet. Durch das Setzen von ball.center wird das Rect so verschoben, dass seine Mitte an diesem Punkt liegt; seine Größe bleibt gleich.

Das vx = -vx ist hier unbedenklich: Der Ball befindet sich in der Mitte, weit entfernt von jedem Schläger.

challenge icon

Aufgabe

Einfach

Bringe einen verpassten Ball zurück in die Mitte.

  1. Wenn der ganze Ball über den linken oder rechten Rand hinaus ist, setze sein center auf (300, 200).
  2. Drehe dort auch vx um.

Drücke auf „Spielen“ und verfehle den Ball: Er kommt zurück und fliegt in die andere Richtung. Drücke 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()

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)

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)

    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)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground