前言

前言

当我在孩童时代第一次玩视频游戏的时候,我就被深深吸引住了。但是,我并不只是想玩视频游戏,我想要开发游戏。我找到像这本书一样的一本书,它教我如何编写第一个程序和游戏。它很有趣也很容易。我所开发的第一款游戏就像是本书中的这些游戏一样。它们就像我父母给我买的任天堂游戏一样有趣,但它们是我自己所开发的游戏。

现在,作为一名成年人,我仍然能够享受到编程的乐趣,并且能从中获到回报。但是,即便当你长大成人后并没有成为一名程序员,编程也还是一种有用而且有趣的技能。它训练你的大脑去思考逻辑、做出规划,并且当你从代码中发现错误的时候,会重新考虑你的思路。

目前的编程书籍大多分为两种类型。第一种,与其说是教编程的书,倒不如说是在教“游戏制作软件”,或教授使用一种呆板的语言,使得编程“简单”到不再是编程。而第二种,它们就像是教数学课一样教编程:所有的原理和概念都以小的应用程序呈现给读者。本书采用了不同的方式,教你通过开发视频游戏来学会编程。我直接展示了游戏的源代码,并且通过实例来解释编程的原理。在我学习编程的时候,这种方法起到了关键作用。对于其他人的程序是如何工作的,我学习的越多,对自己的程序的思路也越多。你所需要的只是计算机、一种叫做Python解释器的免费软件以及这本书。一旦你学会了如何开发本书中的游戏,你就能够自己开发游戏了。

计算机是不可思议的机器,并且学习编写计算机程序并不像人们想象的那样难。计算机程序就是计算机所能够理解的一堆指令,这就像一本故事书就是读者可以读懂的一堆句子一样。

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

当我还是一个孩子的时候,BASIC是作为第一门编程语言来学习的。然而,此后出现了像Python这样的新的编程语言。Python学起来甚至比BASIC还要简单!但是Python也是供专业程序员使用的一种正规语言。此外,安装和使用Python完全是免费的,你只需要连接到因特网并下载它就可以了。

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

本书的目标读者

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

  • 想要自学计算机编程的完全初学者,他们甚至之前没有任何编程经验;
  • 想要通过创建游戏来学习编程的青少年;
  • 想要教其他人编程的成年人和教师;
  • 任何想要通过学习专业编程语言来学习如何编程的人,无论是年轻人还是老年人。

本书主要内容

在本书的大多数章节中,我们都会介绍并讲解一个单独的新的游戏项目。有几章会介绍额外的有用的主题,例如调试。当游戏用到新的编程概念的时候,会讲解这些概念,并且这些章是有意让读者按照顺序来阅读的。以下是每章内容的一个简短说明。

  • 第1章介绍了如何通过每次一行代码来体验一下如何使用Python的交互式shell。
  • 第2章介绍了如何在Python的文件编辑器中编写完整的程序。
  • 在第3章中,我们将编写本书中的第1个程序——猜数字程序,它会要求玩家猜测一个神秘数字,然后针对玩家的猜测是太高了还是太低了给出提示。
  • 在第4章中,我们将编写一个简单的程序来给用户讲几个笑话。
  • 在第5章中,我们将编写一个猜测游戏,其中,玩家必须从两个山洞中做出选择,一个山洞中是友善的龙,另一个山洞中是饥饿的龙。
  • 第6章介绍了如何使用调试器来修正代码中的问题。
  • 第7章说明了如何使用流程图来规划像Hangman游戏这样较长的程序。
  • 在第8章中,我们将根据第7章的流程图,来编写Hangman游戏。
  • 第9章使用了Python的字典数据类型,给Hangman游戏扩展了新的功能。
  • 在第10章中,我们将学习如何使用人工智能来编写人机对抗的Tic-Tac-Toe游戏。
  • 在第11章中,我们将学习如何开发一款叫做Bagels的推理游戏,其中,玩家必须根据线索来猜测神秘数字。
  • 第12章介绍了笛卡尔坐标系,我们将在后面的游戏中用到它。
  • 在第13章中,我们将学习如何编写一款寻宝游戏,其中,玩家要在海洋中搜索丢失的藏宝箱。
  • 在第14章中,我们将开发一个简单的加密程序,它允许我们加密和解密秘密消息。
  • 在第15章中,我们将编写一款高级的人机对抗的Reversi类游戏,其中有一个几乎无法战胜的人工智能对手。
  • 第16章基于第15章的Reversi游戏进行了扩展,编写了多个AI并让其在人机对抗游戏中竞争。
  • 第17章介绍了Python的pygame模块,并且展示了如何使用它来绘制2D图形。
  • 第18章介绍了如何使用pygame实现图形动画。
  • 第19章介绍了在2D游戏中,如何检测物体何时彼此碰撞。
  • 在第20章中,我们将通过添加声音和图像来改进简单的Pygame游戏。
  • 第21章组合了第17章到第20章的概念,开发了一款叫做Dodger的动画游戏。

如何使用本书

本书中的大多数章,都是以该章的特色程序的一个运行示例开始的。这个运行示例,展示了当你运行程序的时候所看到的样子。用户输入的部分用粗体显示。

我建议你自行将每个程序的代码输入到IDLE的文件编辑器中,而不是下载或复制粘贴它们。如果花一些时间来录入代码的话,你将会记住更多内容。

行号和缩进

当输入本书中的源代码的时候,不要输入每行开始的行号。例如,如果你看到如下的代码行,不需要输入左边的9.以及其后面的一个空格:

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

应该只是输入如下内容:

number = random.randint(1, 20)

这里的行号只是为了方便在图书中引用程序中特定的行。它们并不是真正的程序源代码的一部分。除了行号,其他的地方完全按照本书代码的样子录入。注意,有些代码行有4个或8个(或者更多的)空格缩进。代码行开始处的空格是根据Python如何解释指令而变化的,因此,包含这些空格是很重要的。我们来看一个示例。这里的缩进空格用黑色的圆点(•)标记出来,以便你可以清晰地看到它们。

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

第1行代码没有缩进,第2行代码缩进了4个空格,并且第3行代码缩进了8个空格。尽管本书中的示例并没有使用黑色的圆点来标记空格,但IDLE中的每一个字符都具有相同的宽度,因此,可以通过统计每一行之上或之下的字符数,来计算出空格的数目。

较长的代码行

有些代码指令太长了,在本书中无法放到一行之中,并且会换行到下一行。但是,这些代码行在你的计算机屏幕上显示是没有问题的,因此,输入完整的一行而不要按下回车键。通过查看左边的行号,你就知道什么时候一条新的指令开始了。如下的示例只有两条指令:

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

第1条指令换行到页面中的第2行,但是,第2行并没有一个行编号,因此,你很清楚这仍然是第1行的代码。

下载和安装Python

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

下面,我将介绍如何针对Windows、OS X或Ubuntu下载和安装Python 3,特别是Python 3.4。还有比Python 3.4更新一些的版本,但是我们在第17章到第21章所使用的pygame模块,当前只支持Python 3.4。

Python 2和Python 3之间还有一些显著的区别。本书中的程序使用Python 3,并且,如果你试图用Python 2运行它们的话,将会得到错误。这一点很重要,实际上,我在本书中加入了一些企鹅的卡通图片来提醒你这一点。

在Windows下,从https://www.python.org/downloads/release/python-344/下载Windows x86-64 MSI安装程序,然后双击它。你必须输入计算机的管理员密码。

按照安装程序在屏幕上显示的说明来安装Python,如下所示。

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

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

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

在Mac OS X操作系统中,从https://www.python.org/downloads/release/python-344/下载Mac OS X 64-bit/32-bit安装程序,并且双击它。按照安装程序在屏幕上显示的说明来安装Python,如下所示。

1.如果你得到一条“‘Python.mpkg’ can’t be opened because it is from an unidentified developer”的警告,按下Ctrl键的同时用鼠标右键点击Python.mpkg文件,然后,从所出现的菜单中选择Open。可能需要输入计算机管理员的密码。

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

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

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

1.打开Ubuntu Software Center

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

3.选择IDLE (Python 3.4 GUI 64 bit)

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

如果在以上的步骤中遇到问题,可以通过https://www.nostarch.com/inventwithpython/找到替代的Python 3.4安装说明。

启动IDLE

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

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

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

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

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

图像说明文字

图1 IDLE程序的交互式shell

寻求在线帮助

可以从https://www.nostarch.com/inventwithpython/找到许多与本书相关的代码文件和其他资源。如果你想要询问和本书相关的编程问题,请访问http://reddit. com/r/inventwithpython,或者,可以将你的编程问题通过E-mail发送到al@inventwithpython.com。

当询问编程问题时,注意如下几点。

  • 如果录入了本书中的程序,但是发现一个错误,在提问之前,请先通过https://www.nostarch.com/inventwithpython#diff的在线diff工具检查录入错误。复制代码并将其粘贴到diff工具中,以查看你的程序和本书中的代码之间的任何差异。
  • 从网上查找是否有人也问过(或者回答)和你同样的问题。

记住,你将自己的编程问题描述的越好,其他人就越能够给予你帮助。当询问编程问题的时候,请做好以下的事情。

  • 当描述错误的时候,说明你想要做什么。这会让帮助你的人知道你是否完全走错了路。
  • 复制并粘贴完整的错误消息和代码。
  • 说明你的操作系统和版本。
  • 说明你已经尝试了哪些方法去解决问题。这就告诉人们,你已经做了一些工作来试图自己解决问题。
  • 要有礼貌。不要命令帮助你的人或者给他们以求让其快速做出回答。

既然你已经知道了如何寻求帮助,你将立刻开始学习如何编写自己的计算机游戏。

目录

  • 版权
  • 版权声明
  • 内容提要
  • 前言
  • 第1章 交互式Shell
  • 第2章 编写程序
  • 第3章 “猜数字”游戏
  • 第4章 一个讲笑话程序
  • 第5章 Dragon Realm
  • 第6章 使用调试器
  • 第7章 用流程图设计Hangman
  • 第8章 编写Hangman的代码
  • 第9章 Hangman扩展
  • 第10章 Tic Tac Toe
  • 第11章 推理游戏Bagels
  • 第12章 笛卡尔坐标
  • 第13章 Sonar Treasure Hunt游戏
  • 第14章 凯撒密码
  • 第15章 Reversegam游戏
  • 第16章 Reversegam AI模拟
  • 第17章 创建图形
  • 第18章 动画图形
  • 第19章 碰撞检测
  • 第20章 声音和图像
  • 第21章 带有声音和图像的Dodger

相关技术

推荐用户