首页 » 父与子的编程之旅:与小卡特一起学Python » 父与子的编程之旅:与小卡特一起学Python全文在线阅读

《父与子的编程之旅:与小卡特一起学Python》16.10 让球翻转

关灯直达底部

现在来看让球一直移动的第二种选择。不是让它在屏幕边界反弹,而是让它翻转。这表示,球在屏幕右边界消失时,又会在左边界重新出现。

为了让问题更简单一些,我们先来看只是水平移动球的情况。程序见代码清单 16-16。

代码清单 16-16 利用翻转移动沙滩球图像

第 17 行(ifx>screen.get_width:) 和第 18 行(x=0) 中,我们检查球什么时候达到窗口的右边界,并把它移回(或者翻转)到左边界。

你可能注意到了,球在右边出现时,它会“突然跳到”[0, 50]。可能更自然的做法是从屏幕后面“滑入”。把第 18 行(x=0)改为 x=-90,再看看是不是有差别。

你学到了什么

哇 ! 这一章内容真多!在这里,你学习了以下内容。

  • 如何使用 Pygame。

  • 如何创建图形窗口并在其中画一些形状。

  • 如何设置计算机图片中的颜色。

  • 如何把图像复制到图形窗口。

  • 如何完成图像动画,包括将图像移动到新位置时还要从原位置“擦掉”。

  • 如何让沙滩球在窗口中“反弹”。

  • 如何让沙滩球在窗口中“翻转”。

测试题

1. RGB 值 [255, 255, 255] 会得到什么颜色?

2. RGB 值 [0, 255, 0] 会得到什么颜色?

3. 使用哪个 Pygame 方法来画矩形?

4. 使用哪个 Pygame 方法来画线将多个点连接在一起?

5. “像素”是什么意思?

6. 在 Pygame 窗口中,位置 [0, 0] 在哪里?

7. 如果 Pygame 窗口宽为 600 像素,高为 400 像素,下图中哪个字母位于位置 [50, 200] ?

8. 图中哪个字母位于位置 [300, 50] ?

9. 使用哪个 Pygame 方法可以将图像复制到表面(如显示表面)?

10. “移动”一个图像或完成动画时有哪两个主要步骤?

动手试一试

1. 我们讨论了画圆和矩形。Pygame 还提供了一些方法来画直线、弧、椭圆和多边形。试着在程序中使用这些方法画一些其他形状。

可以在 Pygame 文档(www.pygame.org/docs/ref/draw.html)中了解这些方法的更多信息。如果你不能上网,在你的硬盘上也可以找到这个文档(已经随 Pygame 安装),但可能很难找到。可以搜索硬盘寻找一个名为 pygame_draw.html 的文件。

也可以使用 Python 的帮助系统(我们在第 6 章的最后讨论过)。有一点是 SPE 做不到的,它没有提供一个交互 shell,所以要启动 IDLE,键入下面的命令:

>>> import pygame>>> helphelp> pygame.draw  

你会得到一个列表,其中会列出不同的绘制方法以及每种方法的一些解释。

2. 试着修改使用沙滩球图像的示例程序,来使用不同的图像。可以在 /examples/images 文件夹中找到一些示例图像,或者可以下载或自己画图像,还可以使用数码照片。

3. 试着改变代码清单 16-15 或代码清单 16-16 中的 x_speedy_speed 值,让球移动得更快或更慢,并在不同方向上移动。

4. 试着修改代码清单 16-15,让球在隐形的墙或地板(不是窗口边界)上反弹。

5. 在代码清单 16-5 到代码清单 16-9 中(现代艺术、正弦曲线和神秘图片程序),试着把 pygame.display.flip 代码行移到 while 循环中。为此,只需加 4 个空格缩进。在这行代码后面(仍然在 while 循环内部),用下面这行代码增加一个延迟,看看会发生什么:

pygame.time.delay(30)