Untitled

 avatar
unknown
plain_text
5 months ago
3.0 kB
4
Indexable
import random

import pygame as pg

# Initialize pygame
pg.init()

# Set up clock
clock = pg.time.Clock()

# Set up display
width, height = 800, 600
screen = pg.display.set_mode((width, height))
pg.display.set_caption('Ping-Pong Game')

# Set up colors
black = (0, 0, 0)
white = (255, 255, 255)

# Set up font
font = pg.font.Font(None, 36)


class Paddle(pg.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pg.Surface((10, 100))
        self.image.fill(white)
        self.rect = self.image.get_rect()
        self.rect.topleft = (x, y)
        self.speed = 0.75

    def update(self, keys, up_key, down_key, time_elapsed):
        if keys[up_key] and self.rect.top > 0:
            self.rect.y -= self.speed * time_elapsed
        if keys[down_key] and self.rect.bottom < height:
            self.rect.y += self.speed * time_elapsed


class Ball(pg.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pg.Surface((20, 20))
        self.image.fill(white)
        self.rect = self.image.get_rect()
        self.rect.center = (width // 2, height // 2)
        self.speed_x = 0.2
        self.speed_y = 0.2

    def update(self, time_elapsed):
        self.rect.x += self.speed_x * time_elapsed
        self.rect.y += self.speed_y * time_elapsed

        if self.rect.top <= 0 or self.rect.bottom >= height:
            self.speed_y *= -1

        if self.rect.left <= 0 or self.rect.right >= width:
            self.rect.center = (width // 2, height // 2)
            self.speed_x *= random.choice([-1, 1])
            self.speed_y *= random.choice([-1, 1])


# Create sprite groups
all_sprites = pg.sprite.Group()
paddles = pg.sprite.Group()

# Create paddles
left_paddle = Paddle(50, height // 2 - 50)
right_paddle = Paddle(width - 60, height // 2 - 50)
paddles.add(left_paddle, right_paddle)
all_sprites.add(left_paddle, right_paddle)

# Create ball
ball = Ball()
all_sprites.add(ball)

# Main loop
running = True
while running:
    # Get time elapsed, with a maximum of 120 FPS
    time_elapsed = clock.tick(120)

    # Check for events
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False

    # Get keys pressed
    keys = pg.key.get_pressed()

    # Update paddles
    left_paddle.update(keys, pg.K_w, pg.K_s, time_elapsed)
    right_paddle.update(keys, pg.K_UP, pg.K_DOWN, time_elapsed)

    # Update ball
    ball.update(time_elapsed)

    # Ball collision with paddles
    if pg.sprite.spritecollide(ball, paddles, False):
        ball.speed_x *= -1

    # Fill the screen with black
    screen.fill(black)

    # Draw all sprites
    all_sprites.draw(screen)

    # Render FPS
    fps = int(clock.get_fps())
    fps_text = font.render(f"FPS: {fps}", True, white)
    screen.blit(fps_text, (10, 10))

    # Update the display
    pg.display.flip()

# Quit pygame
pg.quit()
Editor is loading...
Leave a Comment