赞
踩
2.2.2,进行alien_invasion.py文件参数修改
经过几个月的学习,自己也有了一些学习python的经验,想通过几个稍微大一点的项目的来对自己的开发能力进行训练和评估,从今天继续进行学习和练习Python编程从入门到实践这本书里面的项目。
本项目中,自己会对项目中使用的一些方法和构造进行解读,自己学会就是自己的东西。
为了避免现在的游戏屏幕黑乎乎一片,为屏幕设置一种常见的颜色颜色吧
因为颜色只需要指定一次,所以我们只需要在,while循环前指定颜色即可,这里接着上次的代码,如果不清楚的可以看上一篇文章。
这里为bg_color,也就是背景颜色,后面是RGB的参数
- pygame.display.set_caption("外星人入侵")
-
- # 设置背景色(RGB)
- bg_color = (220, 226, 241)
-
- # 开始游戏的主循环
- while True: # 永真使得游戏一直执行
这里补充一个知识点,RGB
在 Pygame 中,颜色是以 RGB 值指定的,这种颜色由 红色、绿色和蓝色值 组成,其中每个值的可能取值范围都为 0~255 。颜色值 (255, 0, 0) 表示红色, (0, 255, 0) 表示绿色,而 (0, 0, 255) 表示蓝色。通过组合不同的RGB 值, 可创建1600万种颜色 。在颜色值(220, 226, 241 )中,它将背景设置为一种海天蓝。
这里推荐一下
在pygame中调用方法 screen.fill() ,然后传入bg_color的颜色参数,用背景色填充屏幕;注意: 这个方法只接受一个实参一种颜色。
- # 监听键盘和鼠标事件
- for event in pygame.event.get(): # 使用方法pygame.event.get()。所有键盘和鼠标事件都将促使for循环运行
- if event.type == pygame.QUIT: # 如果玩家单机游戏窗口关闭按钮,则将检测到pygame.QUIT事件
- sys.exit() # 坚持到事件后,退出游戏
-
- # 每次循环时都重绘屏幕
- screen.fill(bg_color)
- # 让最近绘制的屏幕可见
- pygame.display.flip()
在每次为游戏增加新功能时,我们需要引入一些新的设置,为了我们能够更方便维护和使用,并使的游戏更加容易修改,我们创建一个settings.py 文件,方便将游戏中的所有类都存储在这个文件中。
- class Settings():
- """存储《外星人入侵》的所有设置的类"""
-
- def __init__(self):
- """初始化游戏的设置"""
- # 屏幕设置
- self.screen_width = 1200
- self.screen_height = 800
- self.bg_color = (220, 226, 241)
这里我们增加一个Settings类,然后对类中的屏幕宽度,高度和颜色参数进行初始化
为了能够使的settings.py与本文件相互使用,为们需要对本文件进行改动。
首先我们需要将setting.py文件中导入Settings类,这行代码就在最上面,导入库的位置
from settings import Settings # 从settings.py文件导入Settings类
- pygame.init() # 初始化背景设置,让Pygame能够正确地工作
- S_settings = Settings() # 创建Setting实例赋值给S_Setting
- # 创建一个名为screen的显示窗口,实参(1200, 800)是一个元组,指定了游戏窗口的尺寸,宽1200像素,高800像素
- screen = pygame.display.set_mode((S_settings.screen_width, S_settings.screen_height))
在这里,我们创建一个Settings()实例赋值给,S_Setting。
然后我们需要对将括号内的参数改为使用实例去访问。
如果对类的知识不是很熟悉或是遗忘了,可以看我写的一篇文章复习一下。
下面将飞船加入到游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame方法blit()绘制它。 当然选择游戏素材时,注意不要侵权,选择合适图片进行,这里我给出游戏配套的飞船图片,就是这个样子的飞船作为游戏的素材。
我们选择好飞船图片后,考虑到需要对飞船进行很多操作,这里我们首先创建一个ship.py的文件,然后进行创建一个ship的模块,其中包含Ship类用于管理飞船的大部分行为。
下面我们主要进行以下几个操作:
import pygame class Ship(): def __init__(self, screen): """初始化飞船并设置其初始位置""" self.screen = screen # 加载飞船图像并获取其外接矩形 self.image = pygame.image.load('ship.bmp') # 加载飞船图像 self.rect = self.image.get_rect() # 获取图像的矩形 self.screen_rect = screen.get_rect() # 获取屏幕的矩形 # 将每艘新飞船放在屏幕底部中央 self.rect.centerx = self.screen_rect.centerx # 设置飞船的横坐标为屏幕中心点的横坐标 self.rect.bottom = self.screen_rect.bottom # 设置飞船的纵坐标为屏幕底部的纵坐标 def blitme(self): """在指定位置绘制飞船""" self.screen.blit(self.image, self.rect) # 绘制飞船图像到指定的矩形位置上
先初始化screen,然后加载飞船图像,我们需要获取图像以及屏幕的矩形。
然后进行飞船位置的定位,都是使用的是pygame中的模块。
代码如上:
这里使用blit方法进行绘制
代码如上:
首先,我们继续在alien_invasion.py文件中导入ship模块
from ship import Ship # 从ship.py文件导入Ship类
然后我们在底代码中, 示例化ship飞船,为避免每次都创建一艘飞船,所以在while前创建。
- pygame.display.set_caption("外星人入侵")
-
- # 创建一艘飞船
- ship = Ship(screen)
-
- # 开始游戏的主循环
- while True: # 永真使得游戏一直执行
在上次代码的基础上,调用blitme方法进行绘制制飞船。这也是类相关的知识点,示例化后使用对象调用方法。
- # 每次循环时都重绘屏幕
- screen.fill(S_settings.bg_color)
- ship.blitme() # 调用ship.blitme()将飞船绘制到屏幕上
到这里,我们就能看到在正中央最下面的小飞船了,当然这里,我没有将图片背景显示为透明色,只需自行处理一下就ok了。
本篇文章主要是对上一篇文章的继续制作,增加了对游戏背景的改观,然后就是对后续游戏项目中的类管理做了两个框架,作用是方便对于游戏中的一些设置的管理,以及游戏飞船相关的管理。
每日一言
不管全世界所有人怎么说,我都认为自己的感受才是最正确的,无论别人怎么看,我绝不打乱自己的节奏,喜欢的事自然可以坚持,不喜欢的怎么也长久不了。
如果我的学习笔记对你有用,不妨点赞收藏一下,感谢你的支持,当然也欢迎大佬给我一下建议或是对笔记中的不足进行补充,对我学习大有帮助,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。