欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > Python学习笔记43:游戏篇之外星人入侵(四)

Python学习笔记43:游戏篇之外星人入侵(四)

2025/4/30 8:16:28 来源:https://blog.csdn.net/weixin_48668564/article/details/140645555  浏览:    关键词:Python学习笔记43:游戏篇之外星人入侵(四)

前言

在前面的文章中,我们已经对项目进行了简单的分析,并且已经编写好了基础的代码,接下来的工作就是进一步的分析游戏的业务功能,在基础代码之上,进行填充。

背景颜色

我们简单的创建窗口以后,除了命名外暂时没有做特殊处理,背景颜色也是黑色的一片。我们使用书籍中的背景颜色进行填充。

我们找到main模块,将绘制屏幕的函数封装到gf模块中,因为每次循环以后除了简单的更新窗口屏幕,我们还需要刷新飞船,外星人,子弹的位置。

封装屏幕更新函数update_screen,填充背景色。

gf模块代码如下

import sys
import pygamedef check_event():--snip--def update_screen(setting, screen):"""绘制屏幕"""# 填充背景色screen.fill(setting.bg_color)# 让最近绘制的屏幕可见pygame.display.flip()

main模块代码如下

import pygame
import alien_invasion.game_functions as gf
from alien_invasion.setting import Settingdef run_game():"""启动游戏"""# 初始化pygamepygame.init()# 定义一个系统设置对象setting = Setting()# 新建窗口screen = pygame.display.set_mode((setting.screen_width, setting.screen_height))# 窗口命名pygame.display.set_caption(setting.caption)while True:# 处理监听事件gf.check_event()# 刷新屏幕gf.update_screen(setting, screen)if __name__ == '__main__':run_game()

这个时候执行程序,可以看到背景色已经不是黑色了。

在这里插入图片描述

飞船的加载

在游戏窗口弹出的时候,我们需要加载一个飞船对象,并且我们需要将飞船加载到指定的位置,通常来说,我们会将飞船放置到窗口的正中间。

我们要怎么实现这个功能呢?分成两步。

  • 我们需要在飞船的属性中,设置初始位置。
  • 我们需要一个函数,在窗口中绘制填充飞船。

修改代码如下:

import pygameclass Ship:def __init__(self, setting, screen):"""初始化飞船并设置其初始位置"""self.screen = screenself.setting = setting# 加载图片并外接矩形self.image = pygame.transform.scale(pygame.image.load('E:/python_project/alien_invasion/assets/image/ship.bmp'), (50, 50))# 飞船外接的矩形self.rect = self.image.get_rect()# 窗口矩形self.screen_rect = screen.get_rect()# 将每艘新飞船放在屏幕底部中央self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottomdef move(self):"""移动飞船"""def blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image, self.rect)

前三行代码比较简单,先是飞船类中的screen对象和setting对相关使用构造函数传入的值进行赋值,然后是加载一个图片对象,这个图片对象明显就是我们飞船图像。

从这段代码self.rect = self.image.get_rect()开始看起。

我们加载飞船图片后,会在图片外接一个矩形。这个矩形的边界,就可以理解为我们飞船的边界。后面对于飞船位置的判断,都是使用这个外接矩形的边界来判定的,比如飞船移动到左边窗口边框,上边窗口边框等等。

接下来是self.screen_rect = screen.get_rect()

这个就是定义一个矩形使用游戏窗口矩形赋值,这个矩形的属性用于飞船位置的定位以及限制飞船的运行范围。

解释一下本次修改的代码:

  1. self.rect.centerx = self.screen_rect.centerx

    这段代码要和前面连着一起解读。前面已经定义图片的矩形和游戏窗口的矩形,这段代码也是一个赋值的代码,重点在于centerxcenterx 是在 Pygame 中获取屏幕宽度中心位置的一种方法。centerx也就是说这段代码将飞船外接矩形的中心坐标点的x坐标设置成了游戏弹窗的中心点x坐标。

  2. self.rect.bottom = self.screen_rect.bottom

    这段代码也需要和前面的一起连着,同样也是一个赋值的代码,这次赋值的是bottom。在Pygame中使用 .bottom 用于获取屏幕(或任何其他 Surface)底部边缘的 y 坐标。也就是说这段代码是将飞船外接矩形的底部y坐标用弹窗底部的y坐标。

    这两行代码是不是就是将图片外接矩形设置在在了底部中央的位置?x坐标是弹窗中心点的x坐标,y坐标是弹窗底部y坐标,稍微理解一下,画个图可能更好理解。

  3. self.screen.blit(self.image, self.rect)

    这个很好理解了,之前pygame基础讲过了,简单的填充代码。那么调用这个函数,就是在指定的screen的底部中央加载一个飞船。

这些代码理解后,我们现在需要做的就是,在main模块中定义一个飞船类,然后在屏幕更新的函数中,调用飞船对象的blitme函数即可。

那么main模块代码更新如下。

import pygame
import alien_invasion.game_functions as gf
from alien_invasion.setting import Setting
from alien_invasion.ship import Shipdef run_game():"""启动游戏"""# 初始化pygamepygame.init()# 定义一个系统设置对象setting = Setting()# 新建窗口screen = pygame.display.set_mode((setting.screen_width, setting.screen_height))# 窗口命名pygame.display.set_caption(setting.caption)# 定义一个飞船对象ship = Ship(setting, screen)while True:# 处理监听事件gf.check_event()# 刷新屏幕gf.update_screen(setting, screen, ship)if __name__ == '__main__':run_game()

main模块中,定义了一个飞船类,并将这个类作为参数传递到update_screen函数中,对应update_screen函数也应该做出修改

import sys
import pygame--snip--def update_screen(setting, screen, ship):"""更新屏幕"""# 填充背景色screen.fill(setting.bg_color)# 加载飞船ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()

在更新屏幕的函数中,我们使用ship对象调用自身的函数绘制一个飞船在游戏窗口底部中央的位置。

实际效果如下:
在这里插入图片描述

当然,由于我们前期已经做好了项目分析以及架构设计,我们的项目目录基本不会再变化,我们只需要想办法通过代码实现相应的功能,并讲代码编写在相应的模块即可。

结尾

通过本篇文章,我们已经成功将飞船加载到了指定的位置,那么接下来,我们就该让飞船动起来了!各位加油!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词