Untitled
unknown
plain_text
a year ago
3.0 kB
5
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