import pygame import sys # 退出游戏需要 from pygame.locals import * # 把pygame的常量名导进去 from random import * # 随机生成数需要 class Ball(pygame.sprite.Sprite): # 定义一个球类,继承动画精灵基类 def __init__(self, image, position, speed, bg_size): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(image).convert_alpha() # 加载图像 self.rect = self.image.get_rect() # 获取图像矩形 self.rect.left, self.rect.top = position # 获取图像位置 self.speed = speed # 速度 self.width, self.height = bg_size[0], bg_size[1] # 窗口宽高 def move(self): self.rect = self.rect.move(self.speed) # 移动球所在矩形 """实现小球从某侧出界,从对侧进来""" if self.rect.right < 0: # 小球右边小于左边窗口边界,即从右边出去了 self.rect.left = self.width # 屏幕左边出来 elif self.rect.left > self.width: # 小球左边大于右边窗口边界,即从左边出去了 self.rect.right = 0 # 屏幕右边出来 elif self.rect.bottom < 0: # 小球底部坐标小于0,即从上边出去了 self.rect.top = self.height # 屏幕下边出来 elif self.rect.top > self.height: # 小球顶部坐标大于屏幕高,即从下边出去了 self.rect.bottom = 0 # 屏幕上边出来 def main(): # 主函数 pygame.init() # 初始化 ball_image = "gray_ball.png" # 灰球图像 bg_image = "background.png" # 背景图片,图片上有五个黑球 running = True # 初试running为True bg_size = width, height = 1024, 681 # 窗口尺寸,也是背景的尺寸大小 screen = pygame.display.set_mode(bg_size) # 绘制窗口 pygame.display.set_caption("玩个球") # 窗口名 background = pygame.image.load(bg_image).convert_alpha() # 加载背景图片进去 balls = [] # 球列表,初始空列表 for i in range(5): # 遍历0到4 # position = (left, top) 左边和上边的坐标 position = randint(0, width-100), randint(0, height-100) # 随机生成球的坐标,球大小是100×100 speed = [randint(-10, 10), randint(-10, 10)] # 球速度随机-10到10 ball = Ball(ball_image, position, speed, bg_size) # 实例化上面的Ball类 balls.append(ball) # 添加球到球列表 clock = pygame.time.Clock() # 设置帧率需要用到 while running: # 主循环 for event in pygame.event.get(): # 遍历事件 if event.type == QUIT: # ×掉窗口 sys.exit() # 退出游戏 screen.blit(background, (0, 0)) # 更新图像和位置 for each in balls: # 遍历球类里面的各个球 each.move() # 各自移动 screen.blit(each.image, each.rect) # 更新每个球和球矩形位置 pygame.display.flip() # 刷新界面 clock.tick(30) if __name__ == "__main__": main()
效果图
参考博客