您的位置:首页 > 编程语言 > Python开发

Python学习之路日志—利用pygame开发《外星人入侵》游戏项目(1)

2020-08-16 21:32 211 查看

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窗口(如下图):

1.2 设置背景色:

首先,我们创建了一种背景色,并将其存储在

bg_color
中。该颜色只需指定一次,因此我们在进入主while循环前定义它。

我们又调用方法

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

完成后效果如下图所示:

1.3 创建设置类:

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

在主程序文件中,我们导入Settings 类,调用

pygame.init()
,再创建一个Settings实例,并将其存储在变量
ai_settings
中。创建屏幕时,使用了
ai_settings
的属性
screen_width
screen_height
;接下来填充屏幕时,也使用了
ai_settings
来访问背景色。

2.1 创建飞船图像:

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

简要分析一下:

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

我们导入Ship 类,并在创建屏幕后创建一个名为ship 的Ship 实例。必须在主while 循环前面创建该实例,以免每次循环时都创建一艘飞船。填充背景后,我们调用

ship.blitme()
将飞船绘制到屏幕上,确保它出现在背景前面。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: