Untitled
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