零基础入门Python游戏
上QQ阅读APP看书,第一时间看更新

第1章 起步

1.1 用Python编写游戏

近几年,随着人工智能与机器学习的大热,Python语言已经悄然成为众人追捧的编程语言。Python凭借其使用简单、应用范围广泛等优点,在全世界掀起了一股Python语言学习之风。同时,Python在各大编程语言排行榜中基本均位居前五名,并且其热度还在持续升温。

初学Python时,利用它编写游戏是一个很好的锻炼编程能力的方式。编写游戏程序有趣好玩,在编写过程中也会十分开心,这无疑将成为最大的学习动力。

除了练习编程能力以外,通过Python其实还可以开发出许多优秀甚至可以商用的游戏,接下来就让我们一起开始Python游戏编程的探索之旅。

1.1.1 Python能否编写游戏程序

除了少数特殊场合以外,Python几乎可以做任何事情,编写游戏程序当然也不例外。现在,市面上已经出现了许多利用Python语言编写的游戏。另外,凭借Python的简单易用和其游戏库的丰富多样,开发者也可以通过它快速验证自己的游戏原型。

1.1.2 Python能够编写的游戏类型

从外观的角度看,Python能够实现2D游戏与3D游戏。

从类型的角度看,Python能够实现的游戏一般为PC桌面游戏。如果使用特殊的Python库或者方法,则可以开发出手机游戏和网页游戏。

从规模的角度看,Python完全能够胜任中小型游戏的开发。对于对性能要求较高的大型游戏,通过优化游戏引擎,使用Python也可以实现理想的效果。例如,可以使用C语言实现游戏引擎的部分,使用Python语言实现游戏逻辑的部分。

从内容的角度看,Python能够实现的游戏可谓五花八门,完全取决于开发者的想象力。

1.1.3 Python游戏的性能

有些人可能会觉得使用Python这样的解释性脚本语言所开发的游戏的性能较差,因为Python程序的整个执行过程是:首先把源代码逐行翻译为字节码,然后通过解释器将其转换为机器码。与C/C++这种编译性语言相比,Python显得比较繁冗,因此其性能会相对较差;并且Python与机器底层相差甚远,其对内存等硬件资源的访问略显力不从心,这会在一定程度上降低游戏开发者对Python的好感。

的确,以上都是不争的事实,但同时还需要考虑另外一些事实。

如今,机器硬件快速更新换代,在拥有强悍运算能力的机器面前,Python在解释过程中的额外开销已经不值得一提,几乎可以忽略。

此外,笔者曾对两个常用的Python游戏库进行了测试,它们的帧率可以轻而易举地达到60fps。由于人眼可以分辨的刷新频率为30fps,因此即便是快速变化的游戏画面,在人眼看来,60fps也已经足够流畅了。

众所周知,标准Python的实现为CPython,即Python的核心代码是由C语言编写的,因此Python可以很好地支持C语言。CPython提供了一系列可以编写C/C++扩展的API,这使得Python与C/C++的混合编程变得更为简单(Python与C/C++的混合编程有各种各样的方法,并不仅限于使用C/C++扩展API)。基于此,在编写游戏时,开发者可以放心大胆地把CPU密集访问的代码、复杂的算法、底层的操作通过C/C++语言实现,而其他模块则通过Python语言实现,这样既可以利用Python语言的高级特性以很少的代码快速地开发出游戏,又能同时保证游戏对性能的要求。

因此有理由相信,针对中小型游戏的开发,Python完全可以胜任。

1.1.4 使用Python编写游戏

Python深受众人喜爱的一个重要原因是它拥有丰富的第三方库,通过这些第三方库可以快速方便地开发出需要的程序。因此游戏程序的开发自然也不例外,作为入门,我们可以使用现有的第三方库(包括GUI库以及专门为游戏设计的游戏库)开发自己的游戏。

适合作为游戏开发使用的第三方库有很多,常用的Python GUI库如图1-1所示。常用的Python游戏库如图1-2所示。

图1-1 常用的Python GUI库

图1-2 常用的Python游戏库

从理论上来说,使用任意GUI库都可以编写游戏程序,不过由于GUI库不是专门为游戏开发设计的,因此使用其开发游戏时会显得捉襟见肘,难以达到令人满意的效果。因此,在开发Python游戏程序时,建议读者使用第三方游戏库,它们是专门为游戏设计的,无论是界面、功能还是性能,第三方游戏库都更为专业。

目前,比较成熟的Python游戏库如图1-2所示,有2D游戏库,也有3D游戏库。作为入门教程,本书主要介绍Cocos2d与Pygame这两种游戏库,它们均用来开发Python 2D游戏。

当然,如果你是“高端选手”,则既有的第三方游戏库可能已经无法满足你的需求,在这种情况下,你还可以自己开发游戏引擎,甚至编写GUI模块。

1.1.5 Pygame和Cocos2d

本书之所以主要介绍Pygame与Cocos2d,是因为它们目前是使用人数最多的两个Python游戏库。根据某知名产品点评网站的数据显示,排名前五的Python 2D游戏库如图1-3所示。其中,Cocos2d排名第一,Pygame排名第二。

图1-3 Python 2D游戏库排名

Cocos2d之所以能够得到这么多人的支持与青睐,很大一部分原因来自其同源“小伙伴”:Cocos2d-x、Cocos2d-html5、Cocos2d-XNA等,它们都是目前非常流行的游戏引擎,在全球范围内拥有众多拥趸。根据该网站的说明,Cocos目前在全球拥有130万名注册开发者,30万名月活跃开发者,遍布全球203个国家和地区,超过10亿玩家更新数据,采用Cocos引擎开发的游戏所覆盖的市面全品类在移动游戏的中国市场份额占比为45%,全球市场份额占比为30%。

在所有Cocos成员中,Cocos2d是其最初版本,即Cocos2d是Cocos家族的起源。

虽然Cocos2d具有众多版本,但是因为同源,它们的设计理念却十分相似,学会了Cocos2d后,再学习其他Cocos2d的分支就会变得非常容易上手,再加上Cocos2d-x在世界上拥有非常庞大的开发者群体,因此无论是求职者还是独立开发者,这都是值得欣慰的一件事情。

Cocos2d诞生于2008年,Pygame的诞生时间则早得多。Pygame诞生于2000年,距今已有20年的历史,它是一个非常经典的Python游戏库,时至今日仍然经久不衰,拥有非常庞大的用户群体,许多开发者利用它入门Python游戏编程,目前在市面上也有许多关于Pygame的书籍。

尽管Cocos2d-x的开发者众多、社区活跃、文档丰富、就业前景广阔,但是作为Cocos家族“一号成员”的Cocos2d,其相关文档却寥寥无几,目前在市面上还没有一本专门针对Cocos2d的系统性中文书籍,外文书籍也少之又少,甚至就连Cocos2d官方文档对于某些知识的解释都含糊其辞、令人费解。

笔者在使用Pygame与Cocos2d这两个游戏库时感受到,与Pygame相比,Cocos2d的一大特色就是其语法颗粒度较大,API更加偏上层,其场景(Scene)、层(Layer)、导演(Director)、动作(Action)等概念的划分可以使游戏的层次结构更加清晰,这也使得Cocos2d更加贴近现代游戏的设计理念,使用Cocos2d可以轻而易举地实现菜单和场景的切换、各种动作以及复杂的效果等。换句话说,Cocos2d比Pygame的尺度更大、功能更华丽,更像是通往游戏王国的一个“梯子”,而Pygame只是一个“矮凳”。

因此,本书的侧重点主要是Cocos2d。不过,作为一本通用性Python游戏入门书籍,本书有必要简单介绍Pygame,因为Pygame目前仍然是Python的主流2D游戏引擎之一。因此,本书将首先简单介绍Pygame,然后重点介绍Cocos2d。

表1-1列出了Pygame与Cocos2d一些特性的对比,读者可以先简单了解一下,具体内容将在后续章节详细介绍。

表1-1 Pygame与Cocos2d的对比