python应用篇之外星人入侵项目——武装飞船(上)
Posted 一计之长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python应用篇之外星人入侵项目——武装飞船(上)相关的知识,希望对你有一定的参考价值。
前言
我们前面通过24篇文章为大家介绍了Python的基础知识,为了让大家有序成体系的学习基础知识,本人通过一篇文章将前面的24篇文章所涉及的知识点进行了总结,并且对相应的文章链接粘贴在该知识点中,方便大家更好的学习。
本人还是强烈建议读者在看本部分之前把基础过一遍,这样效果才是最好的,应用之前要有Python基础,另外就是应用骗的目的就是为了让大家把基础更好的应用在项目中。本部分会给大家介绍三个较为综合的项目,通过这三个项目,会让大家对前面基础知识的学习有一个综合的应用。另外需要说明的是:为了让大家对该部分的知识进行细致的学习,本人会将代码分几部分给出,每部分会有详细说明,大家只有理解了的提前下才可以完整的运行结果。不会整个代码一起给,那样的话,你只需要直接粘贴复制就可以了,事实上对你一点帮助也没有,所以还是建议读者跟着作者的思路敲一遍代码,这样,知识才是你的。因此,大家跟着一起来看第一个项目——外星人入侵。
一、项目简介
我们介绍的第一个项目就是外星人入侵。这是一个游戏,我们将会使用一个游戏模块,这个模块一会会给大家进行详细的介绍。本项目会通过几篇文章进行介绍;因此,需要大家认真学习。
本项目是通过使用Pygame包
来开发的一款2D游戏,它在玩家每消灭一群向下移动的外星人后,都将玩家提高一个等级;而等级越高,游戏的节奏就越快,难度就越大。完成这个项目后,我们就怼Python基础有了一定的巩固,同时也会让你感受到学习编程的乐趣。同时,我们也稍微了解别人是怎么开发一款游戏的,流程其实都是差不多的。我们将这个项目大致分为三大块;分别为:武装飞船、创建外星人以及计分。首先给大家介绍的就是武装飞船。
二、规划项目
我们在开发大型的项目时,做好规划后再动手编写项目是至关重要的。规划可确保你不偏离轨道,从而提高项目成功的可能性。
我们接下来给大家编写有关“外星人入侵”
的描述,其中虽然没有涵盖这款游戏的所有细节,但让读者清楚地知道如何动手去实现它。
在游戏《外星人入侵》中,玩家控制这一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星人出现在天空中,他们在屏幕上向下移动。玩家的任务就是射击这些外星人。玩家将所有外星人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。只要外星人撞到了玩家的飞船或达到屏幕的底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。
在项目开始之前,我们将首先做的就是部署环境。接着我们会创建一艘可左右移动的飞船,这艘飞船在用户按空格键时能够开火。设置好这种行为后,我们就能够将注意力转向外星人,并提高这款游戏的可玩性。
三、安装Pygame
开始编码之前,首先来安装Pygame
。下面我们仅仅介绍在windows中安装Pygame。由于我们是windows系统,因此,我们不用特点去安装pip,因为安装好pythoin之后就会自带pip,因此,我们首先给大家介绍在windows系统中安装Pygame。
pygame首先要找到相应的版本,然后将其下载。这里需要注意的是一定要和你Python版本相对应,否则安装的时候就或报错。首先检查我们的Python版本:
然后根据自己版本去官网找到pygame对应的版本进行下载:
将其下载后,我们发现其后缀名为.whl
,我们将其复制到我们的项目文件夹中,然后打开命令窗口,用pip惊奇安装:
pip install pygame-1.9.4-cp37-cp37m-win_amd64.whl
安装好之后,我们通过以下命令看其是否安装成功:
pip list
当然我们也可以通过Python中的import命令查看其是否安装成功:
python
import pygame
会出现以下效果,则安装成功:
pygame是我们本项目的核心环境,因此请读者在学习之前务必将其安装成功,如果读这在安装这里有疑问,请大家查看这篇文章,写的较为详细。当我们环境搭好之后,就开始我们的项目之旅吧!
四、开始游戏项目
现在来开始开发游戏《外星人入侵》。首先创建一个空的Pygame窗口。供后面用来绘制游戏元素,如飞船和外星人。我们还将让这个游戏响应用户输入、设置背景色以及加载飞船图像。
4.1 创建Pygame窗口以及响应用户输入
&emsp首先我们创建一个空的pygame窗口。使用pygame编写的游戏的基本结构如下:
import sys
import pygame
def run_game():
# 初始化游戏并创建一个屏幕对象
pygame.init()
screen = pygame.display.set_mode((1200, 800))
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()
首先,我们导入了模块sys和pygame
。模块pygame包含了开发游戏所需要的功能。玩家退出时,我们将使用sys
中来退出游戏。
游戏《外星人入侵》的开头是函数run_ganme()
。我们通过代码行pygame.init()
初始化背景设置,让pygame能够正确的工作。另外,我们调用了pygame.display.set_mode()
来创建一个名为screen的显示窗口,这个游戏的所有图形元素都将在其中绘制。实参(1200, 800)是一个元组,指定了游戏窗口的尺寸。通过这些尺寸值传递给pygame.display.set_mode()
,我们创建了一个宽为1200像素、高800像素的游戏窗口,当然我们读者可以根据自己需求调整适合自己需求的窗口。
对象screen是一个surface。在pygame中,surface是屏幕的一部分,用于显示游戏元素。在这个游戏中,每个元素都是一个surface。display.set_mode()
返回的surface表示整个游戏窗口。我们激活游戏的动画循环后,每经过一次循环都将自动重绘这个surface。
这个游戏由一个while循环控制,其中包含一个事件循环以及管理屏幕更新的代码。事件是用户玩游戏时执行的操作,如按键或移动鼠标。为让程序响应事件,我们编写一个事件循环,以侦听事件,并根据发生的事件执行相应的任务。其实我们代码中的for循环就是一个事件循环。
为访问pygame检测到的事件,我们使用方法pygame.event.get()
。所有键盘和鼠标事件都将促使for循环运行。着这个循环中,我们将编写一系列的if语句来检测并响应特定的事件。例如,玩家单机游戏窗口的关闭按钮,将检测到pygame.QUIT
事件,而我们调用sys.exit()
来退出游戏。
接着我们调用了pygame.display.flip()
,命令pygame让最近绘制的屏幕可见。在这里,它在每次执行while循环时会绘制一个空屏幕,并擦去旧屏幕,使得只有新屏幕可见。在我们移动游戏元素时,pygame.display.flip()
将不断更新屏幕,以显示元素的新位置,并在原来的位置影藏元素,从而营造平滑移动的效果。在这个基本的游戏结构中,最后一行调用run_game()
,这将会初始化游戏并开始主循环。
如果此时运行本代码,会让我们在后台看到如下的一个空屏幕的pygame窗口:
4.2 设置背景色
pygame默认创建一个黑色的屏幕,这太乏味了。下面我们通过代码来将背景设置成另一种颜色:
import sys
import pygame
def run_game():
# 初始化游戏并创建一个屏幕对象
pygame.init()
screen = pygame.display.set_mode((1200, 800))
pygame.display.set_caption("Alien Invasion")
# 设置背景色
bg_color = (230, 230, 230)
# 开始游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 每次循环时都重绘屏幕
screen.fill(bg_color)
# 让最近绘制的屏幕可见
pygame.display.flip()
run_game()
首先我们创建了一种背景色,并将其存储在bg_color
中。该颜色只需指定一次。因此,我们使在进入主while循环前定义颜色。
在pygame中,颜色是RGB值指定的。这种颜色由红色、绿色和蓝色值组成,其中每个值的可能取值范围都在0~255.颜色值(255, 0, 0)表示红色,(0, 255, 0)表示绿色,而(0, 0, 255)表示蓝色。通过组合不同的RGB值,可以创建1600万种颜色。在颜色值(230, 230, 230)中,红色、蓝色和绿色量相同,它将背景设置为一种浅灰色。
另外,我们在调用方法screen_fill()
,用背景色填充屏幕;这个方法只接受一个实参:即一种颜色。具体背景如下:
4.3 创建设置类
每次都给游戏添加新功能,通常也将引入一个新的设置。下面来编写一个名为settings
的模块,其中包含一个名为Settings类
,用于将所有设置在一个地方,以免在代码中导出添加设置。这样,我们就能传递一个设置对象,而不是众多不同的设置。另外,这让函数调用更加简单,且在项目增大时修改游戏的外观更容易:要修改游戏,只需修改settings.py
中的一些值,而无需查找散布在文件中的不同设置。
下面是最初的settings
类:
class Settings():
"""存储《外星人入侵》的所有设置类"""
def __init__(self):
"""初始化游戏的设置"""
# 屏幕的设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color(230, 230, 230)
为创建Settings实例并使用它来访问设置,将alien_invasion.py
修改下面这样:
import sys
import pygame
from settings import Settings
def run_game():
# 初始化游戏并创建一个屏幕对象
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
# 开始游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 每次循环时都重绘屏幕
screen.fill(ai_settings.bg_color)
# 让最近绘制的屏幕可见
pygame.display.flip()
run_game()
在主程序文件中,我们导入Settings类,调用pygame.init(),在创建一个Setting实例,并将其存储在变量ai_settings中。创建屏幕时,使用了ai_settings
属性screen_width
和screen_height
;接下来填充屏幕时,使用了ai_settings
来访问背景色,具体背景图片如下:
总结
本文为大家介绍了大致Python后期文章的撰写情况以及对我们这个项目——《外星人入侵》的游戏玩法做了简单的介绍;另外,还介绍了本项目的整体规划,并且详细介绍了在windows中安装pygame第三方库的方法;最后开始初步介绍了我们项目中初期的一个功能实现;主要包括:对我们的游戏窗口进行了绘制以及颜色设计;最后通过一个Python的settings类将其基本的数值进行了管理,提高了代码的利用率和健壮性。Python是一门注重实际操作的语言,它是众多编程语言中最简单,也是最好入门的。当你把这门语言学会了,再去学习java、go以及C语言就比较简单了。当然,Python也是一门热门语言,对于人工智能的实现有着很大的帮助,因此,值得大家花时间去学习。生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!!
以上是关于python应用篇之外星人入侵项目——武装飞船(上)的主要内容,如果未能解决你的问题,请参考以下文章