BZ易风

导航

 

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()

 

posted on 2019-08-15 16:04  BZ易风  阅读(3280)  评论(0编辑  收藏  举报