用Python和Pygame写游戏-从入门到精通(实战三:植物大战僵尸1)

用Python和Pygame写游戏-从入门到精通(实战三:植物大战僵尸1)

我们终于把pygame的方方面面都说了一遍,也经过了两个小游戏的洗礼,如果您真的好好学习了每一部分并自动动手演练过,那就是一个很不错的Python游戏开发人员啦!

但是,不得不说我们到现在为止,写的东西都不够酷!pygame就这点能耐么?第一篇介绍pygame的时候,我就说了pygame很适合做一个植物大战僵尸之类的游戏,OK,那么,这次开始我们就来用pygame山寨一个吧哈哈。

pygame版植物大战僵尸

游戏介绍就省略了,不过说实话这游戏我也没玩几关,感受了一下就关了。所以现在仿制的与真品相比肯定差了很多,这里只是稍微把我们学习的东西温习应用一下而已,如果各位看到什么不对劲儿的东西,只要不是很致命,也就一笑而过吧。

创意(抄袭)

游戏是否卖座,创意是极为重要的。所有其他技术性的东西,比如画面音乐都是有可替代性的,也就是说,可以通过学习获得的,而创意则不同,植物大战僵尸之前,有无数的塔防游戏,为什么没有这么火?首先制作精良,上手容易,然后两者的结合给人耳目一新,闯关的模式更是易于上手难于精通,非常具有可挖掘性。当然原因肯定不止这么多,不管是游戏还是电影,成功永远有规律可循,然而却永远无法复制。可以学习一下它的好的地方,但光学习是不可能突破的。

这个虽然极为重要,但不是我们的重点,我们这里基本就是抄袭——哦不,是参考,所以就不多讲了(也没有人能讲出什么东西来)。

资源

好的游戏往往需要极为漂亮的画面,这里也还是发挥拿来主义吧~ 各种背景角色啊音乐都解包复制过来就是了。怎么解包?网上搜一下。

不过如果分析一下资源包里的文件,会发现它分的特别细,比如说一个太阳花,周围一圈花瓣,居然是一个一个分开来存放的!这个引擎还挺有意思。我们的pygame不太适合用这样的图片资源,还是把每一帧完整的分别存放吧。当然可以一帧一个文件,有些麻烦,还增加读盘时间。回想下Surface里学习的东西,我们可以把这么多帧拼成一个图片,然后取一部分就可以了。比如说太阳花,处理以后会是下面的样子:

每个帧都并列排开,太阳花的话一共有18个画面,很长的一张图。每个画面都有共同的高度和宽度,所以一旦我们读进这个文件并转成Surface以后,就拆成18个Subsurface,在渲染的时候,分别画出来,就有动态的效果了。

很显然我们在分割的时候需要知道宽度(高度的话,如果只有一行,就无所谓了),可以在代码里写好,我这里就是这么做的。不过也许自己在写游戏的时候,美工和程序不在一起做,那么就需要良好沟通,或者这种小制作的话,就把图片文件名规定一下,叫【sunflower_82x77_18.png】好了,意思是【名字_宽x高_数.后缀】,这样代码可以根据读入的文件名自动转换。只是举个例子,总之,游戏资源繁多,好好的管理是很重要的。

构架

因为只是做一个demo,太复杂的构架也就免了,这次我就随便写写了。而且也没有什么绝对优秀的构架可以放到哪里都好用,根据要求自己选择判断才是重要的。

开始——太阳花摆起来

我们之前的各种动画,变化的只有位置,在一款优秀的游戏中,这个是不允许存在的,飞机什么的可能还好说一些,要是有人物走动的时候,脚也不动一下岂不见鬼了?不过,难道每画一帧就换一个图片贴上去么?好像很麻烦啊……

放心,一点都不比移动困难,温习一下之前的Sprite篇(其实AI部分结束那个时候我就开始穿插写实战了,发现缺少Sprite的知识实在不方便,就加了一个Sprite的介绍,实战就挪到了最后),我们既然把画图全部交给Sprite来做,那么图片的切换也可以交给它来做。

这里有两个内容,一个是load_image函数,它接受三个参数,图片文件名、每一帧的宽度和总帧数,它所做的事情就是把图片读入之后分割Subsurface,把一个Subsurface的列表返回。这个函数被SunFlower类的初始化函数调用,返回值存放在静态变量images里。

为什么把Subsurface列表存为静态变量,也是有含义的。这样一来这个图片只会第一次新建SunFlower类的实例的时候加载一次,下一次在新建一个太阳花的时候,就不会再读取sunflower.png文件了,节约内存和时间。

然后看update方法,这里做的事情便是是SunFlower当前的image指向下一个Subsurface(到头的话重新开始),这样每次blit的时候,就会和上一次有些差别,动态效果就出来了。

不过对于“基于时间的移动”那部分学习的比较好的话,很肯会考虑到一个问题。我们这里是一帧切换一个画面,万一游戏变得很复杂或者运行的机器很糟糕,每一帧都花了大量时间的话,岂不是就动的很慢了?牛机器上的话,又要摆的像螺旋桨一样看着就要飞起来似地……怎么办?一样,使用基于时间的帧切换

与上一个SunFlower类相比,我们多了一个_rate静态变量,然后初始化的时候也多了一个passed_time静态变量,update也多了一个参数。尽管看起来有变得复杂了一些,这一切都是值得的!_rate意味着一帧画面要保持多少毫秒,passed_time则记录着游戏经过了多少毫秒(为了避免passed_time无限增大,我在合适的时候把它归零了),我们通过这两个参数计算出现在应该显示第几帧,尽管形式不同,这和基于时间的移动是一个道理。希望大家能看明白(不明白的话多看几遍……再看不明白的去复习第8部分,再不明白的,面壁去……哦,我是说咱俩都得去面壁)。

这里不就先不给出完整的程序了,相信有了前面的经验很容易就可以写一个框子运行起来,自己试一下?如果你能看到类似左边的画面,你就赢了!准备迎接下一波惊喜吧。

如果没能成功的运行起来(虽然似乎有点不应该),也没关系,这个系列完成以后会放出完整代码的。

本次使用的太阳花资源图片: sunflower.png

### 回答1: 《PythonPygame 游戏 - 从入门到精通.pdf》是一本关于使用Python语言和Pygame库编游戏的书籍。Python是一种简单易学的编程语言,具有丰富的库和工具,非常适合初学者入门。而Pygame是为了方便开发2D游戏而设计的库,提供了丰富的函数和类,可以帮助开发者轻松地创建游戏。 这本书的目标是帮助读者从游戏开发的基础知识入手,逐步了解PythonPygame的使用方法,并逐渐提高到精通水平。书中按照渐进式的学习方式,从基本的Python语法开始介绍,然后逐步引入Pygame库的功能和特性。读者可以学习如何创建游戏窗口,绘制图形和精灵,处理用户输入,实现游戏逻辑等。 此外,书中还涵盖了一些高级的游戏开发技术,比如碰撞检测、音效处理、动画效果和物理模拟等。通过学习这些内容,读者将能够掌握更多复杂游戏开发方法,并能够自己设计和实现自己的游戏。 总的来说,《PythonPygame 游戏 - 从入门到精通.pdf》是一本适合初学者和有一定编程基础的读者学习游戏开发的书籍。读者可以通过学习这本书,掌握使用PythonPygame开发游戏的基本技能,从而进一步提升自己在游戏开发领域的能力。 ### 回答2: 《PythonPygame 游戏-从入门到精通》是一本关于使用Python编程语言和Pygame游戏开发库来编游戏的指南。它逐步介绍了从入门到精通的过程,并教会读者如何利用PythonPygame创建自己的游戏Python是一种简单易学的高级编程语言,被广泛应用于各种领域,包括游戏开发Pygame是一个基于Python的库,专门用于开发2D游戏。它提供了许多功能强大的工具和函数,可以帮助开发者处理游戏图形、声音、输入等方面的内容。 《PythonPygame 游戏-从入门到精通》一书首先向读者介绍了PythonPygame的基础知识,包括安装和配置开发环境以及PythonPygame的基本语法和功能。然后,它逐渐深入探讨了游戏开发的不同方面,包括游戏循环、图形绘制、碰撞检测、游戏物理等。书中使用了大量的示例代码和实际案例来帮助读者理解和应用所学知识。 通过学习《PythonPygame 游戏-从入门到精通》,读者将获得从入门到精通游戏开发技能。他们将学会创建各种类型的游戏,从简单的益智游戏到复杂的角色扮演游戏。此外,书中还提供了一些高级技巧和技术,如使用人工智能和网络功能来增强游戏体验。 总之,这本书是一本全面而深入的学习资源,适合那些希望利用PythonPygame开发游戏的初学者和有经验的开发者。它将引导读者从零开始掌握游戏开发的基本技能,并帮助他们创建自己的精彩游戏作品。 ### 回答3: 《PythonPygame游戏-从入门到精通.pdf》是一本专门介绍如何使用Python及其游戏开发Pygame来编游戏的书籍。 Python是一种高级编程语言,易于学习和使用。它具有简洁的语法和丰富的标准库,可以进行各种编程任务,包括游戏开发Pygame是一个基于Python的开源游戏开发库,提供了丰富的功能和工具,方便开发者进行游戏的设计和制作。 这本书从入门到精通的目标,意味着它适合各种编程经验水平的读者。对于初学者,它会介绍PythonPygame的基本知识和概念,例如变量、条件语句、循环和函数等。然后,它将引导读者学习如何使用Pygame库中的各种功能和模块来创建游戏窗口、处理用户输入、绘制图形等。通过实际的示例和练习,读者可以逐步掌握游戏设计和开发的基本技能。 对于有一定编程经验的读者,本书也提供了更高级的内容和技巧,例如碰撞检测、动画效果、游戏物理学等。读者可以通过这些深入的学习,进一步提升自己的游戏开发能力,设计出更加有趣和复杂的游戏。 总的来说,《PythonPygame游戏-从入门到精通.pdf》是一本对于想要学习如何使用PythonPygame游戏的读者来说非常有价值的书籍。通过它的指导,读者可以系统地学习游戏开发的基础知识和技能,并逐步提高自己的水平,成为一名优秀的游戏开发者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值