import pygame
import sys
# 初始化pygame
pygame.init()
# 屏幕大小
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("打乒乓球")
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# 球类
class Ball:
def __init__(self, x, y, radius, color, x_vel, y_vel):
self.x = x
self.y = y
self.radius = radius
self.color = color
self.x_vel = x_vel
self.y_vel = y_vel
def draw(self, screen):
pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.radius)
def move(self):
self.x += self.x_vel
self.y += self.y_vel
# 碰到左右边界反弹
if self.x - self.radius < 0 or self.x + self.radius > screen_width:
self.x_vel = -self.x_vel
# 碰到上边界增加速度,碰到下边界游戏结束(这里简单处理为碰到下边界也反弹,用于演示)
if self.y - self.radius < 0:
self.y_vel = -self.y_vel
self.x_vel *= 1.1 # 增加水平速度,使游戏更有挑战性
elif self.y + self.radius > screen_height:
# 实际应用中可以在这里结束游戏
self.y = screen_height - self.radius # 为了演示,让球从底部反弹
self.y_vel = -self.y_vel
self.x_vel *= 0.9 # 减速,增加游戏难度
# 玩家类(这里只实现一个玩家,即左侧玩家,使用键盘W和S键控制)
class Player:
def __init__(self, x, y, width, height, color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.vel = 0
def draw(self, screen):
pygame.draw.rect(screen, self.color, (self.x, self.y, self.width, self.height))
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and self.y > 0:
self.y -= 10
if keys[pygame.K_s] and self.y < screen_height - self.height:
self.y += 10
# 创建球和玩家对象
ball = Ball(screen_width // 2, screen_height // 2, 15, WHITE, 5, 5)
player = Player(10, screen_height // 2 - 20, 10, 40, WHITE)
# 游戏主循环
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 移动球和玩家
ball.move()
player.move()
# 检测球是否碰到玩家(这里只检测左侧玩家)
if (ball.x - ball.radius < player.x + player.width and
ball.x + ball.radius > player.x and
ball.y - ball.radius < player.y + player.height and
ball.y + ball.radius > player.y):
ball.y_vel = -ball.y_vel
# 填充背景色
screen.fill(BLACK)
# 绘制球和玩家
ball.draw(screen)
player.draw(screen)
# 更新屏幕显示
pygame.display.flip()
# 控制帧率
clock.tick(60)
pygame.quit()
sys.exit()