Python游戏编程快速上手

978-7-115-42903-2
作者: 【美】Al Sweigart(斯维加特)
译者: 李强
编辑: 陈冀康
分类: Python

图书目录:

详情

本书主要介绍使用Python语言进行游戏开发的一系列内容,书中详细的代码示例能够帮助读者跨越编程的心理障碍,在学习和实践当中体验编程的乐趣。读者在每一章中都将学会一个小游戏的开发,既能够鼓励读者学习Python编程,又能够在学习中体会到一定的成就感和乐趣。同时,本书还适合中小学生课外拓展学习,也适合一切零基础的编程爱好者阅读参考。

图书摘要

版权信息

书名:Python游戏编程快速上手

ISBN:978-7-115-42903-2

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [美] Al Sweigart

  译    李 强

  责任编辑 陈冀康

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


Simplified Chinese translation copyright ©2016 by Posts and Telecommunications Press

ALL RIGHTS RESERVED

Invent Your Own Computer Games with Python,3rd Edition by Al Sweigart

Copyright © 2015 by Al Sweigart

本书中文简体版由作者Al Sweigart授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


Python是一种高级程序设计语言,因其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言。

本书通过编写一个个小巧、有趣的游戏来教授Python编程,并且采用了直接展示游戏的源代码并通过实例来解释编程的原理的方式。全书共21章,14个游戏程序和示例贯穿其中,介绍了Python基础知识、数据类型、函数、流程控制、程序调试、流程图设计、字符串操作、列表和字典、图形和动画、碰撞检测、声音和图像等方方面面的程序设计知识。本书可以帮助读者在轻松有趣的过程中,掌握Python游戏编程的基本技能。

本书适合不同年龄和层次的Python编程初学者阅读。


感谢您阅读本书。编写本书最初的动机是,我看到目前很少有能够激发孩子学习编程的兴趣的图书。我最初使用BASIC编程语言开始编程,使用的是一本像本书一样的书。

在写作本书的过程中,我意识到,像Python这样的现代语言使得编程更加容易,并且为新一代的程序员提供了更多的功能。Python拥有平缓的学习曲线,而且是供专业程序员使用的一种正规语言。

目前的编程书籍大多分为两种类型。第一种,与其说是教编程的书,倒不如说是在教“游戏制作软件”,或教授使用一种呆板的语言,使得编程“简单”到不再是编程。而第二种,它们就像是教数学课一样教编程:所有的原理和概念都以小的应用程序的方式呈现给读者。本书采用了不同的方式直接展示了游戏的源代码,并且通过实例来解释编程的原理。

本书第3版有哪些新的内容?

第3版与第2版相比,没有增加新的内容。但是,第3版精简了20%的篇幅,却介绍了相同的内容。根据需要,增加了解释,并且讲解得更加清晰。

为了防止混淆,源代码故意与第2版保持相同。如果你已经阅读了第2版,就没有理由再阅读本书。然而,如果你正打算编程或介绍朋友学习编程,第3版会让学习过程更加简单、顺利和有趣。

本书的目标读者

编程并不难。但是教你通过编程来做有趣事情的学习材料却很难找到。有些计算机书籍会介绍很多大部分新手程序员都不需要了解的话题。本书将介绍如何编写自己的计算机游戏。你将学习到有用的技巧和可以展示的有趣游戏。本书的目标读者是:


对于编程初学者来说,Python是一种理想的语言。Python的语法并不复杂,学习起来相对比较简单。没有太多编程经验的人,也可以较为轻松地读懂一个简单的Python脚本并理解它在做什么。一旦掌握了Python的基础知识,也比较容易从简单的程序转移到更为高级的项目。而且,Python可以用于很多的领域,从科学计算到游戏开发。即使是程序员新手,也总是能够找到自己感兴趣的项目和应用领域。

市面上已经有很多介绍编程和Python语言的图书了。然而,在本书作者的眼里,这些书大致分为两种类型。而这两种类型,似乎与作者心目中教授编程的图书相去甚远,也都不太适合青少年阅读和学习。正因为很少有能够激发青少年学习编程兴趣的图书,作者才萌发了编写本书的想法。

本书专门针对任何想要学习Python或初次接触编程的人,特别适合作为不同年龄的初学者的第一本编程学习图书。本书的内容浅显易懂,具有很强的操作性,所有的理论知识都是在游戏实例中循序展开。书中的示例,都是一个一个简单但生动有趣的小游戏。本书对这些游戏程序的设计和代码进行深入细致的讲解和分析,使读者在不知不觉之中就能够掌握Python编程的基本知识和方法技巧。一路下来,读者将通过创建游戏来扩展自己的编程技能,并且将所学的知识付诸应用。

我的儿子若瑜上小学一年级,和大多数同龄小朋友一样,他酷爱各种电子游戏。在翻译这本关于游戏编程的书籍的过程中,若瑜表现出极大的热情,他成为第一位读者,每完成一章,他都会通读一次,还会反复地玩书中的游戏;尽管这些游戏很简单,但是对他的吸引力还是很大。他甚至和我约定,今年的生日礼物,就是教会他自己来编写本书中的游戏。感谢若瑜对本书翻译工作的支持和帮助。

我想这样一本能够吸引小朋友的图书,也一定能够让读者朋友感到编程的乐趣,并能从中受益。特别对于打算学习编程的青少年儿童,这是一本不可多得的好书。

虽然付出了很大的精力和心血翻译本书,但难免有不足之处,恳请广大读者谅解,或通过邮件reejohn@sohu.com赐教。


本章主要内容:

你好!本书介绍了如何编写电子游戏。一旦你了解了本书中的游戏是如何工作的,就能够创建自己的游戏了。你只需要一台计算机、一款叫做Python解释器的软件以及这本书。Python解释器可以从网上免费下载。

当我还是一个孩子时,就是像这样的一本书教会了我如何编写第一个程序和游戏。那本书既有趣又简单。现在,作为一名成年人,我仍然能够享受到编程的乐趣,并且能从中获到回报。但是,即便当你长大成人后并没有成为一名程序员,编程也还是一种有用而且有趣的技能。

计算机是不可思议的机器,并且学习编写计算机程序并不像人们想象中的那样难。如果你能够阅读本书,那么就可以编写计算机程序。计算机程序就是计算机所能够理解的一堆指令,这就像一本故事书就是读者可以读懂的一堆句子一样。既然电子游戏就是计算机程序,那么它们也是由指令组成的。

要对计算机发号施令,就使用计算机能够理解的语言来编写一个程序。本书介绍的是一种叫做Python的编程语言。有很多种不同的编程语言,如BASIC、Java、JavaScript、PHP和C++等。

当我还是一个孩子的时候,通常,BASIC是作为第一门编程语言来学习。然而,此后出现了像Python这样的新的编程语言。Python学起来甚至比BASIC还要简单!但是Python也是供专业程序员使用的一种正规语言。很多成年人在工作中使用Python并以此为乐趣。

在本书中,我们将要创建的游戏看上去比Xbox、PlayStation或者Nintendo的游戏简单。这些游戏没有绚丽的图案,因为我们要用它们来教授基本的编程知识。我们有意选择这些简单的游戏,以便你可以专注于学习编程。游戏并非复杂才有趣。

我们需要安装一个叫做Python解释器的软件。解释器程序理解我们用Python语言编写的指令。从现在开始,我把“Python解释器软件”直接简称为“Python”。

特别提示!


一定要安装Python 3而不是Python 2。本书中的程序使用的是Python 3,如果试图使用Python 2来运行这些程序,就会出错。这一点非常重要,我在图1-1中给出了一个卡通企鹅的形象,来提醒你要安装Python 3,所以请一定留意这一点。

图1-1 特别显眼的企鹅提醒你要安装Python3

在Windows操作系统中,下载Python安装程序(文件名的后缀是.msi),并且双击它。按照安装程序在屏幕上显示的说明来安装Python,如下所示:

1.选择Install for All Users,然后单击Next按钮。

2.单击Next按钮,将程序安装在C:\Python34文件夹下。

3.单击Next按钮,跳过Customize Python部分。

在Mac OS X操作系统中,从网上下载适合你的OS X版本的.dmg文件,并且双击它。按照安装程序在屏幕上显示的说明安装Python,如下所示:

1.在一个新的窗口中打开DMG包时,双击Python.mpkg文件。可能需要输入计算机管理员的密码。

2.在Welcome部分,单击Continue按钮,并且单击Agree按钮以接受许可协议。

3.选择HD Macintosh(或者任意硬盘驱动器名称),并且点击Install按钮。

如果你使用的是Ubuntu操作系统,可以通过Ubuntu Software Center,按照如下步骤安装Python:

1.打开Ubuntu Software Center。

2.在窗口右上角的搜索框中输入Python。

3.选择IDLE(使用Python 3.4),或者任何最新的版本。

4.单击Install按钮。可能需要输入计算机管理员的密码来完成安装。

IDLE表示交互式开发环境(Interactive DeveLopment Environment)。对于编写Python程序来说,这个开发环境就像是字处理软件一样。在不同的操作系统上,启动IDLE的方式有所不同。

在Windows操作系统中,单击左下角的启动按钮,输入“IDLE”并且选择IDLE(Python GUI)。

在Mac OS X操作系统中,打开Finder窗口,点击Applications。接下来单击Python 3.4。然后单击IDLE图标。

在Ubuntu或者Linux操作系统中,打开一个终端窗口,然后输入“idle3”。也可以单击屏幕上端的Applications。然后单击Programming和IDLE 3。

当第一次运行IDLE时,出现的窗口是交互式的shell,如图1-2所示。你可以在交互式shell的>>>提示符后输入Python指令,Python就会执行这些指令。显示完执行指令的结果之后,会出现一个新的>>>提示符,并等待下一条指令。

图1-2 Windows、OS X和Ubuntu Linux操作系统的IDLE程序的交互式shell

本书的大多数的章,一开始都会给出一个程序示例,并展示运行这个示例程序的样子。程序中用户输入的部分会用粗体字表示。

请在IDLE文件编辑器中自行输入代码,而不是下载或者复制/粘贴代码。花些时间录入代码,这会帮助你更好地记住如何编程。

当按照本书中内容录入源代码时,不要录入每一行开头处的行号。例如,你会看到书中代码如下所示:

9. number = random.randint(1, 20)

不要录入左边的“9.”,以及紧随其后的空格。只需要录入如下内容即可:

number = random.randint(1, 20)

这些编号只是为了便于在书中引用特定的代码行。它们并非实际程序的一部分。

除了行号之外,确保严格按照代码的样子进行录入。注意,其中一些代码行缩进了4个或8个空格。IDLE中的每个字符是等宽的,所以你可以通过数一数上一行和下一行的字符数来统计空格的数量。

例如,用一个点表示缩进空格,看上去如下所示:

while guesses < 10:
    if number == 42: 
        print('Hello')

一些代码行太长了,无法在图书页面中放到一行之中,那么,代码的文本会换到新的一行中。当录入这些代码行的时候,要将所有代码输入到同一行,并且不要按下回车键。当开始新的一行的时候,你可以从代码左边的行号来区分。例如,如下的代码只有两行:

1. print('This is the first instruction! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxx') 
2. print('This is the second instruction, not the third instruction.')

第一行代码折行了,这使得代码段看上去好像是一共有3行。注意,这只是因为图书的页面不够宽了,无法把第一条指令印刷在一行中。

本书的网址是http://inventwithpython.com。你可以从那里找到许多与本书相关的资源。本书中的几个链接都使用invpy.com域名以缩短URL。

网站http://reddit.com/r/inventwithpython是就本书相关的编程问题提问的一个好地方。一般性的Python问题可以去网站LearnProgramming和LearnPython发贴子,它们的网址分别是http://reddit.com/r/learnprogramminghttp://reddit.com/r/learnpython

你还可以把编程问题发送到作者的邮箱al@inventwithpython.com

请记住,聪明的提问方式对自己和别人都有帮助。一定要阅读这些网站上“Frequently Asked Questions”部分,这些网站都会介绍如何以正确的方式提问。当询问编程问题时,注意如下几点:

问别人“为什么我的程序不能工作?”,这样的问题并不能告诉他们任何有用的信息。应该告诉他们你想要做什么、确切的错误是什么以及你的操作系统和版本。


本章主要内容:

在开始创建游戏之前,我们需要先介绍一些基本的编程概念。本章不会创建游戏,但是学习这些概念是编写电子游戏程序的第一步。我们先来学习如何使用Python的交互式shell。

按照第1章中介绍的步骤打开IDLE,然后使用Python来求解一些简单的数学问题。交互式shell可以像计算器一样工作。在交互式shell的>>>提示符之后,输入2+2,然后按下回车键(有些键盘上显示为RETURN键)。

图2-1展示了交互式shell给出的响应是数字4。

这道数学题就是一个简单的编程指令。加号(+)告诉计算机把数字2和2相加。表2-1列出了Python中其他可用的数学符号。减号(-)是数字相减。乘号(*)是数字相乘。除号(/)是数字相除。

图2-1 在交互式shell中输入2+2

表2-1 Python中的各种数学操作符

操作符

运算

+

加法

-

减法

*

乘法

/

除法

当以这种方式使用时,+、-、*和/叫做操作符。操作符告诉Python要对它们旁边的数字进行何种运算。

整数就是诸如4、99或者0这样的数。浮点数(简写为float)就是诸如3.5、42.1或者5.0这样的分数或小数。在Python中,数字5是整数,但是5.0是浮点数。这些数字都称为值。

下面这些数学问题就是表达式的示例。计算机可以在几秒钟之内解决数百万道这样的数学题。表达式是由操作符(数学符号)连接的值(数字)组成的。尝试在交互式shell中输入一些这样的数学问题,每输入完一道题后按一下回车键。

2+2+2+2+2 
8*6 
10-5+6 
2   +        2

当输入上面的指令后,交互式shell将如图2-2所示。

图2-2 输入指令后IDLE窗口的样子

图2-3 表达式由值和操作符组成

注意,在2+ 2的示例中,值和操作符之间可以有任意多个空格。然而,当把指令输入到交互式shell中时,总是从一行的开头开始执行(即指令之前不能有空格)。

当计算机求解表达式10 + 5并且得到值15的时候,它就已经计算了这个表达式。计算一个表达式就是把表达式规约为一个数字,就像解答一道数学题而把问题简化成一个数字一样:数字就是答案。表达式10 + 5和表达式10 + 3 + 2的计算结果都是15。

表达式可以是任意大小的,但它们总是会求解得到一个数字。即便单个值也可以是表达式:表达式15的计算结果就是值15。例如,表达式8 * 3 / 2 + 2 + 7 -9,通过如下步骤,其计算结果是值12.0。

8 * 3 / 2 + 2 + 7–9 
              ▼    
    24 / 2 + 2 + 7–9 
              ▼    
      12.0  + 2 + 7–9 
              ▼    
          14.0  + 7–9 
              ▼    
                21.0–9 
                   ▼    
                    12.0

在交互式shell中看不到所有这些步骤。交互式shell对表达式进行运算,并且只把结果展示给我们。

>>> 8 * 3 / 2 + 2 + 7 -9 
12.0

需要注意的是,除法操作符(/)的运算结果是一个浮点数,所以24/2的结果是12.0。使用浮点数的数学运算,其结果也是浮点数,所以12.0 +2的结果是14.0。

如果在交互式shell中输入5+,将会得到一条错误消息。

>>> 5 + 
SyntaxError: invalid syntax

产生这个错误,是因为5+不是一个表达式。表达式通过操作符来连接值。但是加法操作符期待+后边有一个值。当漏掉这个值时,就会出现一个错误。

SyntaxError表示Python不理解这条指令,因为你的输入不正确。很多时候,从事计算机编程不只是告诉计算机要做什么,还要知道如何告诉它。

但是,不要担心出错。错误并不会对计算机造成危害。只要在交互式shell中的下一个>>>提示符处,重新输入正确的指令即可。

也可以把表达式的计算结果的值存储到变量中,以便后面可以使用它。可以把变量当做是一个可以保存值的盒子。

一条赋值语句指令会把一个值保存到一个变量中。输入变量的名称,后边跟着等号(=称为赋值操作符),然后是要存储到这个变量中的值。例如,在交互式shell中输入spam = 15:

>>> spam = 15 
>>>

这将把值15存储到spam变量的盒子中,如图2-4所示。名字“spam”是盒子的标签(Python由此可以识别变量),而值写在盒子中的一张便签上。

图2-4 变量就像是可以容纳值的盒子

当按下回车键时,你不会看到任何响应。在Python中,如果没有出现错误,就表示成功地执行了指令。然后将会出现>>>提示符,你可以输入下一条指令了。

和表达式不同,语句是不会计算为任何值的指令。正因为如此,在spam = 15之后,交互式shell的下一行中没有显示任何的值。如果你不清楚哪些指令是表达式,哪些指令是语句,那么请记住:表达式会得到一个值,而任何其他类型的指令都是一条语句。

变量保存的是值而不是表达式。例如,考虑一下语句spam = 10 + 5和spam = 10 + 7 - 2中的表达式。它们的运算结果都是15。最终结果是相同的:两条赋值语句都把值15保存到了变量spam中。

第一次在赋值语句中使用一个变量的时候,Python将会创建该变量。要查看变量中的值,在交互式shell中输入该变量的名称:

>>> spam = 15 
>>> spam 
15

表达式spam得到了变量spam中的值,即15。可以在表达式中使用变量。尝试在交互式shell中输入如下指令:

>>> spam = 15 
>>> spam + 5 
20

我们已经把变量spam的值设置为15,所以输入spam + 5就像是输入表达式15 + 5一样。下面是spam + 5的运算步骤:

spam + 5 
      ▼  
  15 + 5 
      ▼
     20

在赋值语句创建变量之前,不能使用该变量。否则,Python将会给出一个NameError的错误,因为尚不存在该名称的变量。输错了变量名称也会得到这样一个错误:

>>> spam = 15 
>>> spma 
Traceback (most recent call last): 
   File "<pyshell#8>", line 1, in <module>
      spma 
NameError: name 'spma' is not defined

出现这个错误,是因为虽然有spam变量,但是并没有名为spma的变量。

可以通过输入另一条赋值语句来修改变量中存储的值。例如,尝试在交互式shell中输入如下语句:

>>> spam = 15 
>>> spam + 5 
20 
>>> spam = 3 
>>> spam + 5 
8

当第一次输入spam + 5时,表达式的计算结果是20,因为我们把15存储在spam中。然而,当输入spam = 3时,用值3替代(或覆盖)了值15。现在,当我们输入spam + 5时,表达式的计算结果是8,因为现在spam的值是3。覆盖的过程如图2-5所示。

图2-5 用值3覆盖了spam中的值15

甚至可以使用spam变量中的这个值,来给spam赋一个新的值:

>>> spam = 15 
>>> spam = spam + 5 
20

赋值语句spam = spam + 5的意思是:“spam变量中的新值是,spam当前的值加上5”。通过在交互式shell中输入如下的语句,让spam中的值持续几次增加5:

>>> spam = 15 
>>> spam = spam + 5 
>>> spam = spam + 5 
>>> spam = spam + 5 
>>> spam 
30

在程序中,可以根据需要创建任意多个变量。例如,让我们给名为eggs和bacon的两个变量分配不同的值,如下所示:

>>> bacon = 10 
>>> eggs = 15

现在,变量bacon中是10,变量eggs中是15。每个变量都有自己的盒子,其中拥有其自己的值,如图2-6所示。

图2-6 变量“bacon”和变量“eggs”中所存储的值

尝试在交互式shell中输入spam = bacon + eggs,然后查看spam中的新值:

>>> bacon = 10 
>>> eggs = 15 
>>> spam = bacon + eggs 
>>> spam 
     25

现在,spam中的值是25。当把bacon和eggs相加时,就是把其值10和15相加。变量包含的是值而不是表达式。把值25赋给变量spam,而不是把表达式bacon + eggs赋给变量。在spam = bacon + eggs赋值语句之后,对于bacon或者eggs的修改不会再影响到spam。

在本章中,我们介绍了关于编写Python指令的基础知识。Python需要你以严格的方式,准确地告诉它要做什么工作。计算机不具备人的常识,并且只能理解特定的指令。

表达式是用操作符(如+或-)把值(如2或5)组合起来。Python可以计算表达式,也就是把表达式规约为一个值。可以把值保存在变量中,以便程序可以记住它们,并且随后可以使用它们。

在Python中,有许多其他类型的操作符和值。在下一章中,我们将介绍更多的基础概念,并且编写第一个程序。我们还会介绍在表达式中使用文本。Python不仅能够处理数字,它的功能比计算器强大得多。


相关图书

深度学习的数学——使用Python语言
深度学习的数学——使用Python语言
动手学自然语言处理
动手学自然语言处理
Web应用安全
Web应用安全
Python高性能编程(第2版)
Python高性能编程(第2版)
图像处理与计算机视觉实践——基于OpenCV和Python
图像处理与计算机视觉实践——基于OpenCV和Python
Python数据科学实战
Python数据科学实战

相关文章

相关课程