一,使用Pygame
1)简介
我们来开发一个游戏吧!我们将使用Pygame,这是一组功能强大而有趣的模块,可用于管理图形、动画乃至声音,让你能够更轻松地开发复杂的游戏。通过使用Pygame来处理在屏幕上绘制图像等任务,你不用考虑众多烦琐而艰难的编码工作,而是将重点放在程序的高级逻辑上。
在本章中,你将安装Pygame,再创建一艘能够根据用户输入而左右移动和射击的飞船。在接下来的两章中,你将创建一群作为射杀目标的外星人,并做其他的改进,如限制可供玩家使用的飞船数以及添加记分牌。
从本章开始,你还将学习管理包含多个文件的项目。我们将重构很多代码,以提高代码的效率,并管理文件的内容,以确保项目组织有序。
创建游戏是趣学语言的理想方式。看别人玩你编写的游戏让你很有满足感,而编写简单的游戏有助于你明白专业级游戏是怎么编写出来的。在阅读本章的过程中,请动手输入并运行代码,以明白各个代码块对整个游戏所做的贡献,并尝试不同的值和设置,这样你将对如何改进游戏的交互性有更深入的认识。
注意 :游戏《外星人入侵》将包含很多不同的文件,因此请在你的系统中新建一个文件夹,并将其命名为alien_invasion 。请务必将这个项目的所有文件都存储到这个文件夹中,这样相关的import语句才能正确地工作。
2)规划项目
开发大型项目时,做好规划后再动手编写项目很重要。规划可确保你不偏离轨道,从而提高项目成功的可能性。
下面来编写有关游戏《外星人入侵》的描述,其中虽然没有涵盖这款游戏的所有细节,但能让你清楚地知道该如何动手开发它。
在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星人出现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。玩家将所有外星人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。只要有外星人撞到了玩家的飞船或到达了屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。
在第一个开发阶段,我们将创建一艘可左右移动的飞船,这艘飞船在用户按空格键时能够开火。设置好这种行为后,我们就能够将注意力转向外星人,并提高这款游戏的可玩性。
3)安装Pygame
打开终端更新最新的pip:python -m pip install -U pip
安装命令:python -m pip install pygame
进入python模式:python
查看是否安装正常:import pygame
二,开启项目,设置类
1)开始游戏项目
现在来开始开发游戏《外星人入侵》。首先创建一个空的Pygame窗口,供后面用来绘制游戏元素,如飞船和外星人。我们还将让这个游戏响应用户输入、设置背景色以及加载飞船图像。
2)创建Pygame窗口以及响应用户输入
在Sublime中新建一个py文件:
就是终端就是CD到代码文件存放的文件夹,使用命令 python + 文件名字 执行
此时什么都没有,直接运行会得到一个空的Pygame窗口:
3)设置背景色
将Pygame默认的黑色背景色修改:
4)创建设置类
每次给游戏添加新功能时,通常也将引入一些新设置。下面来编写一个名为settings 的模块,其中包含一个名为Settings 的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。这样,我们就能传递一个设置对象,而不是众多不同的设置。
另外,这让函数调用更简单,且在项目增大时修改游戏的外观更容易:要修改游戏,只需修改settings.py中的一些值,而无需查找散布在文件中的不同设置。
三,添加图像
1)添加飞船图像
下面将飞船加入到游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame方法blit() 绘制它。
为游戏选择素材时,务必要注意许可。最安全、最不费钱的方式是使用http://pixabay.com/ 等网站提供的图形,这些图形无需许可,你可以对其进行修改。
在游戏中几乎可以使用任何类型的图像文件,但使用位图(.bmp)文件最为简单,因为Pygame默认加载位图。虽然可配置Pygame以使用其他文件类型,但有些文件类型要求你在计算机上安装相应的图像库。大多数图像都为.jpg、.png或.gif格式,但可使用Photoshop、GIMP和Paint等工具将其转换为位图。
选择图像时,要特别注意其背景色。请尽可能选择背景透明的图像,这样可使用图像编辑器将其背景设置为任何颜色。图像的背景色与游戏的背景色相同时,游戏看起来最漂亮;你也可以将游戏的背景色设置成与图像的背景色相同。(https://www.nostarch.com/pythoncrashcourse/ )中找到。这个文件的背景色与这个项目使用的设置相同。请在主项目文件(alien_invasion)中新建一个文件夹,将其命名为images,并将文件ship.bmp保存到这个文件夹中。
2)在屏幕上绘制飞船
下面来更新alien_invasion.py,使其创建一艘飞船,并调用其方法blitme():
3)重构:模块game_functions
在大型项目中,经常需要在添加新代码前重构既有代码。重构旨在简化既有代码的结构,使其更容易扩展。在本节中,我们将创建一个名为game_functions 的新模块,它将存储大量让游戏《外星人入侵》运行的函数。通过创建模块game_functions ,可避免alien_invasion.py太长,并使其逻辑更容易理解。
这两个函数让while 循环更简单,并让后续开发更容易:在模块game_functions 而不是run_game() 中完成大部分工作。
鉴于我们一开始只想使用一个文件,因此没有立刻引入模game_functions 。这让你能够了解实际的开发过程:一开始将代码编写得尽可能简单,并在项目越来越复杂时进行重构。
对代码进行重构使其更容易扩展后,可以开始处理游戏的动态方面了!