1精灵文件 plane_sprites.py
1 import pygame 2 3 class GameSprite(pygame.sprite.Sprite): 4 """飞机大战游戏精灵""" 5 def __init__(self,plane_name,speed=1): 6 7 # 调用父类方法 只要继承的不是object类 初始化的第一步都要调用父类方法 8 super().__init__() 9 10 # 定义对象的属性 11 # 加载精灵图像 12 self.image = pygame.image.load(plane_name) 13 # 精灵大小 14 # image的get_rect()方法,可以返回pygame.Rect(0,0,图像宽,图像高)的对象 15 self.rect = self.image.get_rect() 16 # 设置精灵移动速度 17 self.speed = speed 18 19 def update(self): 20 """更新精灵位置""" 21 # 在屏幕的垂直方向移动 22 self.rect.y += self.speed
2.绘制图像主页面
1 import pygame 2 from plane_sprites import * 3 4 # 游戏初始化 5 pygame.init() 6 7 # 创建游戏窗口 480*700 8 # 使用display.set_mode()创建的screen对象是一个内存中的屏幕数据对象,可以理解成是油画的画布 9 screen = pygame.display.set_mode((480,700)) 10 11 # 绘制背景图像 12 bg = pygame.image.load("./images/background.png") 13 # 绘制背景图像在屏幕 14 #screen.blit方法是在画布上绘制很多图像 15 # blit方法接收两个参数,第一个参数是图像数据,第二个参数是图像的坐标 16 screen.blit(bg,(0,0)) 17 18 # display.update()会将画布的最终结果绘制在屏幕上,这样可以提高屏幕绘制效率,增加游戏的流畅度 19 # pygame.display.update() 20 21 #hero1. 绘制英雄飞机 22 hero = pygame.image.load("./images/me1.png") 23 24 #hero2. 绘制图像在屏幕 25 screen.blit(hero,(150,300)) 26 27 # 更新显示 只有调用update()方法 才能开到绘制在屏幕上的飞机 28 pygame.display.update( ) 29 30 #hero3. 定义rect记录英雄飞机的初始位置 31 # Rect(x坐标,y坐标,图片宽,图片高) 32 hero_rect = pygame.Rect(150,300,102,126) 33 34 35 # pygame.time.Clock 可以非常方便的设置屏幕绘制速度----刷新频率 36 # clock1.初始化创建一个时钟对象 37 clock = pygame.time.Clock() 38 39 # 创建敌机的精灵 40 enemy = GameSprite("./images/enemy1.png") 41 enemy2 = GameSprite("./images/enemy1.png",2) 42 43 44 # 创建敌机精灵组 45 enemy_group = pygame.sprite.Group(enemy,enemy2) 46 47 # 游戏循环 48 while True: 49 # clock2.在游戏循环中让时钟对象调用tick(频率)方法 50 # 制定循环体内部的代码执行的频率 51 clock.tick(60) #每秒更新60次 52 53 # hero4.修改英雄飞机的位置 54 hero_rect.y -= 1 55 56 if hero_rect.y <= 0-hero_rect.height: 57 hero_rect.y = 700 58 59 #刷新绘制背景图片 如果没有这一步 英雄飞机飞行时会有重影 60 screen.blit(bg,(0,0)) 61 # hero5.重新绘制英雄图像 62 screen.blit(hero,hero_rect) #blit第二个参数可以直接把Rect()放进去 63 64 # 让精灵组调用两个方法才能显示敌机 65 # 精灵组1.update 66 enemy_group.update() 67 # 精灵组2.draw(画布) 68 enemy_group.draw(screen) 69 70 71 # 更新显示 72 pygame.display.update() 73 74 # 捕获事件 75 # event_list = pygame.event.get() 76 # print(event_list) 77 78 79 # 游戏循环中监听事件 pygame.event.get() 可以获得用户当前所做动作的事件列表 80 for event in pygame.event.get(): 81 82 # 事件event 83 # print(event) 84 85 # 判断用户是否点击了关闭按钮 86 if event.type == pygame.QUIT: 87 print("游戏腿粗") 88 89 # 退出游戏循环 卸载所有模块 90 pygame.quit() 91 92 # 直接退出系统 93 exit()