1.1 创建pygame窗口及响应用户输入:

首先,我创建一个空的pygame窗口。使用pygame编写的游戏的基本结构如下:

import sys
import pygame

def run_game():
    pygame.init() #初始化
    screen = pygame.display.set_mode((1200,800)) #调用这个来创建名为screen的窗口
    pygame.display.set_caption('Alien Invasion') #命名游戏
    
    #开始游戏的主循环
    while True:
#侦听事件
	for event in pygame.event.get():
	    if event.type == pygame.QUIT:
		sys.exit()
	pygame.display.flip() #不断更新屏幕,以显示元素的新位置
	
run_game() #初始化游戏并开始主循环

简要分析一下:

  1. 代码行pygame.init() 初始化背景设置,让Pygame能够正确地工作。
  2. 我又调用了pygame.display.set_mode() 来创建一个名为screen 的显示窗口,这个游戏的所有图形元素都将在其中绘制。对象screen 是一个surface。在Pygame中,surface是屏幕的一部分,用于显示游戏元素。display.set_mode() 返回的surface表示整个游戏窗口
  3. 这个游戏由一个while 循环控制,其中包含一个事件循环以及管理屏幕更新的代码。事件是用户玩游戏时执行的操作,如按键或移动鼠标。为让程序响应事件,我们编写一个事件循环,以侦听事件,并根据发生的事件执行相应的任务。其中的for循环就是一个事件循环。
  4. 为访问Pygame检测到的事件,我们使用方法pygame.event.get() 。所有键盘和鼠标事件都将促使for 循环运行。
  5. 我接着调用了pygame.display.flip() ,命令Pygame让最近绘制的屏幕可见。pygame.display.flip() 将不断更新屏幕,以显示元素的新位置,并在原来的位置隐藏元素,从而营造平滑移动的效果。
  6. 最后一行调用了run_game() ,这将初始化游戏并开始主循环。

如果此时运行这些代码,你将看到一个空的Pygame窗口(如下图):

python游戏外星人入侵外星人图片 python外星人入侵心得_pygame


1.2 设置背景色:

python游戏外星人入侵外星人图片 python外星人入侵心得_游戏_02

首先,我们创建了一种背景色,并将其存储在bg_color 中。该颜色只需指定一次,因此我们在进入主while循环前定义它。

我们又调用方法screen.fill() ,用背景色填充屏幕;这个方法只接受一个实参:一种颜色。

完成后效果如下图所示:

python游戏外星人入侵外星人图片 python外星人入侵心得_背景色_03


1.3 创建设置类:

编写一个名为settings的模块,其中包含一个名为Settings 的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。这样,我们就能传递一个设置对象,而不是众多不同的设置:

python游戏外星人入侵外星人图片 python外星人入侵心得_游戏_04

在主程序文件中,我们导入Settings 类,调用pygame.init() ,再创建一个Settings实例,并将其存储在变量ai_settings 中。创建屏幕时,使用了ai_settings 的属性screen_widthscreen_height ;接下来填充屏幕时,也使用了ai_settings 来访问背景色。


2.1 创建飞船图像:

下面将飞船加入到游戏中,选择用于表示飞船的图像后,需要将其显示到屏幕上。我们将创建一个名为ship的模块,其中包含Ship 类,它负责管理飞船的大部分行为:

python游戏外星人入侵外星人图片 python外星人入侵心得_pygame_05


简要分析一下:

  1. 首先,我们导入了模块pygame 。Ship 的方法__init__() 接受两个参数:引用self 和screen ,其中后者指定了要将飞船绘制到什么地方。为加载图像,我们调用了pygame.image.load()
  2. 加载图像后,我们使用get_rect() 获取相应surface的属性rect ,
  3. 要将游戏元素居中,可设置相应rect 对象的属性center 、centerx 或centery 。要让游戏元素与屏幕边缘对齐,可使用属性top 、bottom 、left 或right ;要调整游戏元素的水平或垂直位置,可使用属性x 和y ,它们分别是相应矩形左上角的 x 和 y 坐标。
  4. 我们将把飞船放在屏幕底部中央。为此,首先将表示屏幕的矩形存储在self.screen_rect 中,再将self.rect.centerx (飞船中心的x坐标)设置为表示屏幕的矩形的属性centerx ,并将self.rect.bottom (飞船下边缘的y 坐标)设置为表示屏幕的矩形的属性bottom 。Pygame将使用这些rect 属性来放置飞船图像, 使其与屏幕下边缘对齐并水平居中。
  5. 最后,我们定义了方法blitme() ,它根据self.rect 指定的位置将图像绘制到屏幕上。

下面来更新alien_invasion.py,使其创建一艘飞船,并调用其方法blitme()

python游戏外星人入侵外星人图片 python外星人入侵心得_游戏_06

我们导入Ship 类,并在创建屏幕后创建一个名为ship 的Ship 实例。必须在主while 循环前面创建该实例,以免每次循环时都创建一艘飞船。填充背景后,我们调用ship.blitme() 将飞船绘制到屏幕上,确保它出现在背景前面。

现在如果运行,将看到飞船位于空游戏屏幕底部中央:

python游戏外星人入侵外星人图片 python外星人入侵心得_pygame_07