欢迎来到“只读课堂”!
In [1]:
#这节课我们来实战python:Python游戏开发
In [2]:
#飞机大战
In [3]:
#以下是我们今天的课件以及项目规划,如果想直接进入课堂,就往下拉。
飞机大战
创建游戏是趣学语言的理想方式。看别人玩你编写的游戏让你很有满足感,而编写简单的游戏有助于你明白专业级游戏是怎么编写出来的。在阅读本章的过程中,请动手输入并运行代码,以明白各个代码块对整个游戏所做的贡献,并尝试不同的值和设置,这样你将对如何改进游戏的交互性有更深入的认识。
> 游戏《飞机大战》将包含很多不同的文件,因此请在你的系统中新建一个文件夹,并将其命名为PlaneFight
。请务必将这个项目的所有文件都存储到这个文件夹中,这样相关的import
语句才能正确地工作。
规划项目
开发大型项目时,做好规划后再动手编写项目很重要。规划可确保你不偏离轨道,从而提高项目成功的可能性。
> 在游戏《飞机大战》中,你可以控制着一架最初出现在屏幕底部中央的飞机。玩家可以使用箭头键左右移动飞机,还可使用空格键进行射击。游戏开始时,一群外星人出现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。只要有外星人撞到了玩家的飞机或到达了屏幕底部,游戏结束。
安装Pygame
1. 手动安装
- 先下载whl
文件
> 下载地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame
- 手动安装
> pip install pygame‑1.9.3‑cp36‑cp36m‑win_amd64.whl
2. pip
安装
> pip3 install pygame
> 以上可以使用Linux和Windows系统
Linux系统也可以使用sudo apt install python3-pygame
安装Python3的版本。
检测安装
进入Python环境,执行:
```python
>>> import pygame
>>>
```
如果没有任何输出,就说明Python导入了Pygame
开始游戏项目
首先创建一个空的Pygame
窗口,供后面用来绘制游戏元素,如飞机和外星人。我们还将让这个游戏响应用户输入、设置背景色以及加载飞机图像。
创建Pygame
窗口以及响应用户输入
首先,我们创建一个空的Pygame
窗口。使用Pygame
编写的游戏的基本结构如下:
```python
import sys
import pygame
def run_game():
初始化游戏并创建一个屏幕对象
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('PlaneFight')
开始游戏主循环
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_game()
,代码行pygame.init()
初始化背景设置,让Pygame
能够正确地工作。
调用pygame.display.set_mode()
来创建一个名为screen
的显示窗口,这个游戏的所有图形元素都将在其中绘制。实参(800, 600)
是一个元组,指定了游戏窗口的尺寸。通过将这些尺寸值传递给pygame.display.set_mode()
,我们创建了一个宽800像素、高600像素的游戏窗口(你可以根据自己的显示器尺寸调整这些值)。
对象screen
是一个surface
。在Pygame
中,surface
是屏幕的一部分,用于显示游戏元素。在这个游戏中,每个元素(如外星人或飞机)都是一个surface
。display.set_mode()
返回的surface
表示整个游戏窗口。我们激活游戏的动画循环后,每经过一次循环都将自动重绘这个surface
。
为访问Pygame
检测到的事件,我们使用方法pygame.event.get()
。所有键盘和鼠标事件都将促使for循环运行。在这个循环中,我们将编写一系列的if
语句来检测并响应特定的事件。例如,玩家单击游戏窗口的关闭按钮时,将检测到pygame.QUIT
事件,而我们调用sys.exit()
来退出游戏。
调用了pygame.display.flip()
,命令Pygame
让最近绘制的屏幕可见。在这里,它在每次执行while
循环时都绘制一个空屏幕,并擦去旧屏幕,使得只有新屏幕可见。在我们移动游戏元素时,pygame.display.flip()
将不断更新屏幕,以显示元素的新位置,并在原来的位置隐藏元素,从而营造平滑移动的效果。
设置背景色
Pygame
默认创建一个黑色屏幕,太乏味了。下面来将背景设置为另一种颜色:
```python
import sys
impor