游戏效果
- 蓝色球球跟随鼠标移动
- 红色爱心随机分布在屏幕上
- 碰到爱心后得分,爱心重新随机位置
- 左上角显示当前分数
代码实现
import pygame
import random
pygame.init()
# 游戏常量设置
WIDTH, HEIGHT = 800, 600
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("球球刷爱心")
# 颜色定义
WHITE = (255, 255, 255)
BLUE = (0, 128, 255)
PINK = (255, 50, 100)
# 物体大小
BALL_RADIUS = 30
HEART_SIZE = 40
# 字体设置
FONT = pygame.font.SysFont(None, 48)
class Ball:
"""控制球球的类"""
def __init__(self):
self.x = WIDTH // 2
self.y = HEIGHT // 2
self.radius = BALL_RADIUS
self.color = BLUE
def update(self):
"""跟随鼠标更新位置"""
self.x, self.y = pygame.mouse.get_pos()
# 防止球球超出屏幕边界
self.x = max(self.radius, min(self.x, WIDTH - self.radius))
self.y = max(self.radius, min(self.y, HEIGHT - self.radius))
def draw(self):
"""绘制球球"""
pygame.draw.circle(SCREEN, self.color, (self.x, self.y), self.radius)
def get_collision_rect(self):
"""获取碰撞检测用的矩形"""
return pygame.Rect(self.x - self.radius, self.y - self.radius,
self.radius*2, self.radius*2)
class Heart:
"""控制爱心的类"""
def __init__(self):
self.reset()
self.size = HEART_SIZE
self.color = PINK
def reset(self):
"""随机生成爱心位置"""
self.x = random.randint(self.size//2, WIDTH - self.size//2)
self.y = random.randint(self.size//2, HEIGHT - self.size//2)
def draw(self):
"""绘制爱心形状"""
points = [
(self.x, self.y - self.size//4), # 顶部
(self.x + self.size//2, self.y + self.size//4), # 右下方
(self.x, self.y + self.size//2), # 底部
(self.x - self.size//2, self.y + self.size//4) # 左下方
]
pygame.draw.polygon(SCREEN, self.color, points)
def get_collision_rect(self):
"""获取碰撞检测用的矩形"""
return pygame.Rect(
self.x - self.size//2,
self.y - self.size//4,
self.size,
self.size//2 + self.size//4
)
def main():
"""游戏主函数"""
clock = pygame.time.Clock()
ball = Ball()
hearts = [Heart() for _ in range(5)] # 生成5个爱心
score = 0
running = True
while running:
# 填充背景色
SCREEN.fill(WHITE)
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 更新球球位置
ball.update()
# 碰撞检测与得分
ball_rect = ball.get_collision_rect()
for heart in hearts:
if ball_rect.colliderect(heart.get_collision_rect()):
score += 1
heart.reset()
# 绘制所有元素
ball.draw()
for heart in hearts:
heart.draw()
# 显示分数
score_text = FONT.render(f"Score: {score}", True, (0,0,0))
SCREEN.blit(score_text, (10, 10))
# 更新屏幕
pygame.display.flip()
clock.tick(60) # 控制帧率
pygame.quit()
if __name__ == "__main__":
main()
运行说明
- 首先确保已安装Pygame库:
pip install pygame - 运行代码后,移动鼠标控制蓝色球球
- 碰到红色爱心即可得分,爱心会自动重新出现在随机位置
- 点击窗口关闭按钮退出游戏
这个游戏简单易玩,适合作为入门级Python游戏项目,你可以根据需求扩展功能(如添加时间限制、难度递增、音效等)。




