pygame模块
pygame是一个游戏开发模块。
首先我们需要导入:import pygame
然后需要进行初始化:pygame.init()
在这个过程中开发游戏。
最后在结束游戏运行时卸载模块:pygame.quit()
精灵和精灵组
(1)起初看到“精灵”两个字的时候还有些许的惊讶,可能很久没看到这么有童年味道的词汇了。
简单理解:精灵就是在游戏窗口中动或者不动的单一个体,在飞机大战中例如英雄机,子弹等。
精灵组就是一堆精灵,比如在游戏窗口中的一排子弹。
(2)要注意的是,我们在设计游戏对象的父类时,需要继承pygame.sprite.Sprite,在父类的构造函数中调用super().__init__()。否则运行时会报错:AttributeError。
(3)还有一些碰撞监测的方法,我使用的是pygame.sprite.collide_mask(bullet, enemy)来判断子弹和敌机是否进行了碰撞。
(4)精灵组的相关方法:
(4.1)创建精灵组:
pygame.sprite.Group()
(4.2)精灵组添加精灵:self.dead_planes_group.add(enemy)
(4.3)精灵组更新及绘制:
self.dead_planes_group.update() self.dead_planes_group.draw(self.screen)
定时器
在飞机大战中我们将用到两个定时器模块的方法:
(1)pygame.time.Clock()
此函数用来设置游戏窗口的FPS,示例代码如下:
FPS = 60 self.clock = pygame.time.Clock() self.clock.tick(FPS)
别忘了更新屏幕:
pygame.display.update()
(2)pygame.time.set_timer(event, millis)
event是我们定义的常量,millis是毫秒数。
我们在事件获取函数pygame.event.get()中判断事件的类型,然后根据事件的类型执行响应的操作。
AIR_PLANE = pygame.USEREVENT FIRE = pygame.USEREVENT + 1 pygame.time.set_timer(AIR_PLANE, CREATE_TIME) pygame.time.set_timer(FIRE, FIRE_TIME) for event in pygame.event.get(): if event.type == pygame.QUIT: # 退出游戏 elif event.type == AIR_PLANE: # 创造敌机 elif event.type == FIRE: # 英雄机开火
- random.choice(seq) 函数
seq可以是一个列表,元组或字符串。
这个函数是在seq中随机选择一个元素。
结合之前的eval()函数多态实例化的文章,我的思路如下:
首先定义一个字符串列表,表中元素是我们创建敌机的类名。然后随机选择一个类进行创建。示例代码如下:
enemy_str = ["AirPlane", "BigAirPlane", "SuperAirPlane"] enemy = random.choice(Game.enemy_str) self.air_plane_groups.add(eval(enemy)())
- 创建及设置游戏窗口
SCREEN_RECT = pygame.Rect(0, 0, 480, 700) self.screen = pygame.display.set_mode(SCREEN_RECT.size)
rect相关概念请参考此链接:



