1.创建Pygame窗口以及响应用户输入
alien_invasion.py
import sys
import pygame
def run_game():
#初始化游戏并创建一个屏幕对象
pygame.init()
screen = pygame.display.set.mode((1200,800))
pygame.dispaly.set_caption("Alien Invasion")
#开始游戏的主循环
while True:
#监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#让最近绘制的屏幕可见
pygame.dispaly.flip()
run_game()
2.创建settings类包含对游戏的设置
3.添加图片
最好的是bmp图
在Pygame中,原点(0,0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800 的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。
4.重构:模块game_functions
一开始将代码编写得尽可能简单,并在项目越来越复杂时进行重构。
5.驾驶飞船
相应按键
每当用户按键时,都将在Pygame中注册一个事件。事件都是通过方法pygame.event.get()获 取的,因此在函数check_events()中,我们需要指定要检查哪些类型的事件。每次按键都被注册 为一个KEYDOWN事件。
持续移动
我们将让游 戏检测pygame.KEYUP事件,以便玩家松开右箭头键时我们能够知道这一点;然后,我们将结合使 用KEYDOWN和KEYUP事件,以及一个名为moving_right的标志来实现持续移动。
左右移动
调整飞船的速度
可以在Settings类中添加属性 ship_speed_factor,用于控制飞船的速度
通过将速度设置指定为小数值,可在后面加快游戏的节奏时更细致地控制飞船的速度。然而, rect的centerx等属性只能存储整数值,因此我们需要对Ship类做些修改
限制飞船的活动范围
重构check_events()
6.简单小结
alien_invasion.py
主文件alien_invasion.py创建一系列整个游戏都要用到的对象:存储在ai_settings中的设置、 存储在screen中的主显示surface以及一个飞船实例。文件alien_invasion.py还包含游戏的主循环, 这是一个调用check_events()、ship.update()和update_screen()的while循环。
要玩游戏《外星人入侵》,只需运行文件alien_invasion.py。其他文件(settings.py、 game_functions.py、ship.py)包含的代码被直接或间接地导入到这个文件中。
settings.py
文件settings.py包含Settings类,这个类只包含方法__init__(),它初始化控制游戏外观和飞 船速度的属性。
game_functions.py
文件game_functions.py包含一系列函数,游戏的大部分工作都是由它们完成的。函数 check_events()检测相关的事件,如按键和松开,并使用辅助函数check_keydown_events()和check_keyup_events()来处理这些事件。就目前而言,这些函数管理飞船的移动。模块 game_functions还包含函数update_screen(),它用于在每次执行主循环时都重绘屏幕。
ship.py
文件ship.py包含Ship类,这个类包含方法__init__()、管理飞船位置的方法update()以及在 屏幕上绘制飞船的方法blitme()。表示飞船的图像存储在文件夹images下的文件ship.bmp中
7.射击
添加子弹设置
首先,更新settings.py,在其方法__init__()末尾存储新类Bullet所需的值
创建Bullet类
将子弹存储到编组中
定义Bullet类和必要的设置后,就可以编写代码了,在玩家每次按空格键时都射出一发子弹。 首先,我们将在alien_invasion.py中创建一个编组(group),用于存储所有有效的子弹,以便能够 管理发射出去的所有子弹。
到12.8.4