这节课我们参考了[13岁外国小程序员的编程游戏](https://www.raywenderlich.com/2795-beginning-game-programming-for-teens-with-python)。
[TOC]
# 步骤零:python 环境部署
我们还是使用`Anaconda` 的 `python3.5` 虚拟环境,这里面我们要用到`pygame`这个工具,`python3`对`pygame`的支持要好很多,所以我们得用 python3.5 的虚拟环境(好吧,顺便吐槽一下`python2`和`python3`的兼容问题,不过这个问题k12以下小朋友就不用了解了,等他们长大了,这个问题肯定不存在了,他们遇到的可能是`python7`和`python8`的兼容问题。)
切换到虚拟环境:
`source activate python3.5`
然后安装`pygame`,这里使用`pip`这个安装工具,(貌似 python 有很多安装方式,我们选一个最简单的工具。人生苦短,不要太麻烦!)
`pip install -U pygame --user`
安装后,要检查一下`pygame`是不是真的装上了,这个工具的开发者很好啊,提供了一个方法(我们都要向他学习,人人都这样,世界该多美好啊!)
`python -m pygame.examples.aliens`
这里参考的是[pygame安装指南](https://www.pygame.org/wiki/GettingStarted)。
然后就进行正题了。
*****
# 步骤一:Hello 兔子哥
添加[游戏资源](http://www.raywenderlich.com/downloads/BB_Resources.zip)。下载文件后,在硬盘上为您的游戏创建一个文件夹,并将资源文件夹解压缩到该文件夹中,以便您的游戏文件夹中有一个名为resources的子文件夹,其中各种资源分组在其中的其他文件夹中,如下所示:
![](https://box.kancloud.cn/96b664ed247c79b96e04ee6a146a8142_1400x518.png)
现在可以开始创建游戏“兔子和獾”了。***代码如下:***
```
# 1 - Import library 导入我们需要的工具
import pygame
from pygame.locals import *
# 2 - Initialize the game 初始化游戏
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))
# 3 - Load images 加载背景图片
player = pygame.image.load("resources/images/dude.png")
# 4 - keep looping through 建立一个循环
while 1:
# 5 - clear the screen before drawing it again 游戏重新开始,把屏幕清空
screen.fill(0)
# 6 - draw the screen elements 在屏幕上画一些必要的东西
screen.blit(player, (100,100))
# 7 - update the screen 更新屏幕
pygame.display.flip()
# 8 - if it is quit the game 如果检测到退出游戏,就退出游戏
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
exit(0)
```
将文件保存到您的游戏文件夹(资源子文件夹所在的文件夹)中,并将其命名为`game.py`。
我们逐节介绍代码:
1. 导入pygame库。 这样我们就可以在程序中使用库中的函数。
1. 初始化PyGame并设置显示窗口。
1. 加载将用于兔子的图像。
1. 继续循环代码块。
> 注意:在其他计算机语言里使用花括号来显示要在`while`循环或`if`语句中执行的代码块,`Python`使用缩进来识别代码块。 所以适当的缩进在`Python`中非常重要 - 记住这一点。
5. 在绘制任何东西之前用黑色填充屏幕。
1. 将加载的兔子图像添加到`x = 100`和`y = 100`的屏幕上。
1. 更新屏幕。
1. 检查是否有任何新事件,如果新事件是退出,则退出程序。
> 注意:根据`pygame` 文档 ,您不需要调用`pygame.quit()`,因为解释器会在解释器关闭时自动调用它。 但是,至少在`Mac OS`上,除非调用`pygame.quit()` ,否则游戏将在退出时挂起。
如果现在运行代码,应该看到类似于下面的屏幕:
![](https://box.kancloud.cn/18cd07e2340c8c3254f9b8afbd2d5d89_391x320.png)
兔子上场了,准备好行动了!
看起来有点孤独有点黑茫茫,只有兔子站在黑色的背景上。 是时候美化一点点了。
# 步骤二:兔子哥说,给我来点背景,我要战斗
让我们首先在游戏场景中添加背景。 这可以通过几个`screen.blit()`调用来完成。
在第3节末尾,加载播放器图像后,添加以下代码:
```
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
```
这会把图像并将放入屏幕中。 但是,草地没有覆盖整个屏幕区域哦,这意味着我们得多写点代码把草覆盖在整个屏幕区域上。
将以下代码添加到第6节开头的`game.py`中:
```
for x in range(width/grass.get_width()+1):
for y in range(height/grass.get_height()+1):
screen.blit(grass,(x*100,y*100))
screen.blit(castle,(0,30))
screen.blit(castle,(0,135))
screen.blit(castle,(0,240))
screen.blit(castle,(0,345 ))
```
`for`语句首先遍历`x`。 然后,在第二个`for`循环中,它将遍历`y`并在`for`循环生成的`x`和`y`值处绘制草。 接下来的几行只是在屏幕上绘制城堡。
如果你现在运行程序,你应该得到这样的东西:
![](https://box.kancloud.cn/bb992b243849aa64147c87133dc3d97f_391x320.png)
这样看起来好很多啦!
简单一点的是这样的:
![](https://box.kancloud.cn/c3d4856089c31b88a45d3efdcea398d2_1366x768.png)