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

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_widthscreen_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() 将飞船绘制到屏幕上,确保它出现在背景前面。

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

在这里插入图片描述


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值