按月归档:2011年九月月

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

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

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

pygame版植物大战僵尸

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

创意(抄袭)

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

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

资源

更多

用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块4)

恶搞俄罗斯方块的制造之旅也可以结束了,通过上三次的说明,基本就整遍了整个代码,虽说都说了一些类名和方法名而没有涉及到具体的实现,不过实现就是排列几句代码,大家一定没问题吧:)

揉成一团

总是可以把这几次说的东西放在一起运行了,界面的美化啥的我完全没有做,所以很难看,咱们主要学习的东西是pygame,就不在这上面多花功夫了。

运行界面:

恶搞俄罗斯,猫先生

这个是第4种模式的截图,会落下莫名其妙的东西的版本…… 落下个猫先生纪念“夏目友人帐3”的完结。。。

各个模式说明:

  • 1: 落下的直接消失
  • 2: 落下长条
  • 3: 非常小的方块
  • 4: 上图所示,落下乱糟糟的东西(当然可以随便改)
  • 5: 暂时和6一样,发挥交给你们了:)
  • 6: 正常模式

完成度说明:

直接进去菜单是没有背景的,你很容易自己加一个……游戏过程中空格暂停,Esc返回菜单,返回菜单时直接覆写在当前的游戏画面上。暂时懒得弄了,大家先凑合凑合。

资源说明:

图片和音效是网上随便找的,许可什么的,我什么不知道……
背景音乐史俄罗斯方块之经典“永恒俄罗斯”的音乐中的Hawker’s song,理论上应该是有版权的,不过都已经20多年了,而且咱们是学习,学习~ 不要太在意了(笑)

下载

DBank下载

我放在DBank上是因为记得DBank不用下载器也不用登陆就能下载的,直接点可能会跳出登陆框,直接右键另存为就OK了。

py2exe的执行代码也放出来了,基本就是参考我之前的py2exe篇写的,不过说实话这东西真是难搞,还是多多实践,根据每个工程自己修改,不存在一个脚本放在哪里都好用!

总结

如果您做过游戏,稍微看看这里面的代码一定会嗤之以鼻,看似有条不紊实际上可实在有些乱,各种界面的跳转也是很让人崩溃。不管图像还是运动,都是用最原始的东西组织起来的,维护起来简直要命啊。

我们需要“游戏引擎”来让我们的游戏书写更加的漂亮。

为什么一开始不提供一个引擎?如果一开始就引入引擎的概念,会让我们对引擎的认识不深刻。只有真正的用原始的代码写过一个游戏后,我们才能意识到“引擎”的作用和必要性。对我们面对的东西有足够深刻的认识,才能让我们更卓越!

当时光看这几篇文章的内容,是不够理解的,只要把代码通读,然后完成一个新的模式(就是那个空着的模式5),才能有足够的认识(这个代码写的不够漂亮,着重理解的是pygame,而不是整个代码设计,我可不能误人子弟啊)。

下一个游戏会更加的精彩……

更新

关于在fedora上运行不起来的问题,我原想会有哪位fedora用户研究一下把问题贴出来呢,看来没有,只好自己安装了尝试了……

问题在于game.py中pre_init(44100, 16, 2, 1024*4),fedora必须把16改小,比如8,或者默认的-16,具体原因我也没时间找,猜测可能是fedora的声卡驱动对回放的限制有些多吧。

混乱的Python:生命游戏

偶尔在python.cn上看到一篇《谁说使用 Python 你就写不出混乱的代码?》,地址在这里。觉得非常有意思,记得使用Perl的时候,因为其灵活的语法,可以有很优美的代码书写方式,也可以写出非常混乱的代码。而Python,从一开始就致力于消除这种混乱,缩进的结构使得Python代码相对其他语言整齐了许多,刚开始用Python的时候虽然也想过能不能写出乱糟糟的代码,但是一开始就败在缩进上,也就慢慢忘记了。

分析

这次看到,自然是兴致盎然,稍微研究一下,发现它是把一些看似乱糟糟的字符串重新编码了,然后交给exec执行了。关键就在这一句:

用了Python的几个函数式编程的函数。lambda非常常用,reduce相对来说少用一些,但是需要使用的时候非常好用!

可能有人不是非常熟悉这个reduce函数,因为其他的语言里未必有这个东西,其实reduce的含义是折叠(我知道这么说还是很抽象),举一个小例子,让你计算0~100所有数字的和(OK,我知道你知道答案,但请编程实现),一般的话,就会这么写(这里不考虑等差数列的公式):

很简单,但是使用reduce会更简单:

没有循环,没有中间变量,一句搞定!

它的运行过程如下图所示

reduce

reduce接受两个或三个参数,第一个为要执行的函数,第二个为一个序列,第三个这里先无视。

在我们这个例子的执行过程中,reduce从序列中取出两个值(0和1),相加计算出一个结果(1),然后再从序列中取出一个值(2),和刚刚得到结果(1)相加再得到一个结果(3),然后重复这个过程直到结束。

上面的混乱代码中,reduce对字符串不停的修正,把空白(空格和回车)删除,把!替换为空格,”替换为回车空格。然后得到一个格式完好的代码。换句话说,通过这个运算方法,我们把原先的代码中的空格和回车先用”或!替换以后,可以在代码中随意增加空格和换行了,图片的样子就是这么出来的。

生命游戏

知道了原理,我们就能很容易的造一个我们自己喜欢的混乱python代码了。不过我们可以看到,虽然有任意的回车和空白,我们还是能很容易的在字符串里看到python里的关键字,这样显得不够酷……

我把这个东西再升级了一下,字符全都混淆(ASCII值加1),基本就成乱码了,然后再用这个方法调整空白。

用pygame做了一个生命游戏的演示,代码写成一个骷髅头的样子(抱歉,非常的不像。。。。)。关于生命游戏,相信有些编程经验的应该会知道,可以在维基上看看说明,百度百科里好像更全一些,而这里,则有更学术性的研究。

代码完成后是这个样子的:

为了“清晰”起见,解码的代码就写在了最后没有混杂在里面了,稍微有些明白的就能打出原始代码来。

执行需要安装pygame库,执行效果如下(示意图,非连续):

希望能有“玩心”的朋友继续研究,让Python再混沌一些吧~~

用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块3)

我们讲解了俄罗斯方块的各个宏观的部分,这次就是更细致的编程了,不过代码量实在不小,如果完全贴出来估计会吓退很多人,所以我打算这里只贴出数据和方法名,至于方法里的代码就省略了,一切有兴趣的朋友,请参考最后放出来的源文件。

这个是main调用的Tetris类,这个类实现了我们所看到的游戏画面,是整个俄罗斯方块游戏的核心代码。为了明晰,它还会调用shape类来实现当前的shape,下面会讲:

这里的东西基本都是和python语言本身相关的,pygame的内容并不多,所以就不多讲了。看一下__init__的内容,了解了结构和数据,整个运作也就能明白了:
更多

HTML5中的Canvas(颜色)

这一次讲解Canvas中的颜色应用,同时Canvas中的颜色还能带透明,太酷了~~

指定颜色

现在为止我们画的图形都是黑色的,这是Canvas绘制的默认色彩,要想换一种颜色的话,就得在实际画之前指定颜色。


—— 指定绘制线的颜色

—— 指定填充的颜色

来看看实际的例子:

效果如下图:

指定透明度

和普通的CSS中一样,我们指定颜色的时候还可以带一个alpha值(不过用的不多,IE9之前都不支持)。看代码:
更多

教你如何在AdMob上日进斗金

废话不多说先上图:

今天一天也快结束了,看样子是没法赚的超过1000刀了,不知道这个坎什么时候能跨过去……不过就三个应用能跑成这样应该很不容易了吧。

钱放在里面也已经几个月没取了,国内从PayPal上拿钱还是比较麻烦,反正也不急着用,等再多一点一次性转账吧。

想想刚开始做Android应用,也在几个广告平台里犹豫过,到底哪个平台最赚钱实在是很难选择。不过国内很多市场对广告平台很挑剔(恶性竞争啊),只有AdMob的兼容性最好,而且用起来也没那么多规矩,就选择了它。

一开始的时候很可怜,没日没夜的做,一天才0.x刀的收入,那时候幻想,什么时候能上一天10美元,可就笑歪了。然而上天一点都不酬勤,最好的几美元就是极限了,而且还是个别几天才有,比如发布当天,隔天就掉下去了。整天对着可怜的收入,不禁怀疑自己是不是走错了道路……甚至连打开AdMob的勇气都没有了。

那样的日子终于一去不复返了!小康已经在向我招手,赚老外的钱果然还是很Happy的~~

很激动是吧,下面我就说一下在AdMob赚钱的要点:
更多

在Live Wallpaper设定中加入AdMob广告

自从Android 2.1中加入了动态壁纸,一下子牛叉了很多啊,漂亮的壁纸层出不穷,看上去老土的Android手机总算也是可以炫一下了。

动态壁纸基础

制作方法,网上太多了,虽然基本都是抄的,其实都是从sample上发展出来的,我也把要点记一下,每次写新的都要把老的工程打开看,啥记性……

  1. res/xml中指定动态壁纸的xml文件:

    这里是说明自己图标和设定Activity。
  2. 还有一个设定Activity的xml文件,就是普通的PreferenceScreen,省略。
  3. 更多

用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块2)

我们接着来做这个整死人不偿命的俄罗斯方块。

代码组织和名词约定

上一次我们稍微整理了一下游戏运行的框架,这里需要整理一下python代码的框架,一个典型的pygame脚本结构如下:

其中,lib为pygame的脚本,游戏中声音、图像、控制模块等都放在这里;而data就是游戏的资源文件,图像、声音等文件放在这里。当然这东西并不是硬性规定的,你可以用你自己喜欢的结构来组织自己的pygame游戏,事实上,除了付你工钱的那家伙以外,没有人可以强迫你这样做或那样做~ 这次我还是用这种典型的方法来存放各个文件,便于大家理解。

因为我是抽空在Linux和Windows上交叉编写的,代码中没有中文注释,游戏里也没有中文的输出,所以希望看到清楚解释的话,还是应该好好的看这几篇文章。当然最后我会放出所有的代码,也会用py2exe编译一份exe出来,方便传给不会用python的人娱乐。

因为主要是讲解pygame,很多python相关的知识点就一代而过了,只稍微解释一下可能有些疑问的,如果有看不懂的,请留言,我会酌情追加到文章中。

我们约定,那个掉落方块的区域叫board,落下的方块叫shape,组成方块的最小单位叫tile

我们的lib中可能会有这几个文件(未必是全部):

更多

【深イイ話】直击心灵的三行情诗

非常有名的三行情诗,看看这视频了解一下。

下面是比较完整的版本,上面视频中的基本都是从这里选出来的。
翻译么,有那个心境的时候来两个吧……

另外,虽然翻译作“情诗”,并不单纯是爱情,也可以使亲情友情,甚至思念关切都可以写在里面。

もし天国で僕を見つけても
どうか知らんぷりでいて欲しい
今度も僕からプロポーズしたいから
分娩室から出たら父がいた 
「よく頑張ったね」頭をぐしゃぐしゃになでてくれた 
いつぶりだろう 母親になった直後 娘になった
「がんばれ!」と背中を押したのも
「がんばらなくていい」と抱きしめてくれたのも
あなたでした。
お父さん、
子供らも巣立ち2人になりましたね。
また、しょうちゃんと呼んでもいいですか?
メールがきた、今何してんの?って 
ぼーっとしてるって返した  
君のメール待ってたなんて送れへんよ

更多

使用PhoneGap开发Android程序小记

PhoneGap实在是伟大!当然在此之前是HTML5/CSS3/JS很伟大,可以做出那么酷的应用,然后变成本地应用才有意义。

phonegap

简介

PhoneGap是一款开源的手机应用开发平台,它仅仅只用HTML和JavaScript语言就可以制作出能在多个移动设备上运行的应用。PhoneGap将移动设备本身提供的复杂的API进行了抽象和简化,提供了一系列丰富的API供开发者调用,只要你会HTML和Javascript或者Java语言,就可以利用PhoneGap提供的API去调用各种功能,制作出在各种手机平台上运行的应用。

目前这类开发移动程序框架还是很多的,除PhoneGap外还有比如Web App、Titanium、MonoTouch、Native App等。试用了PhoneGap,感觉还是很不错的。

使用

介绍PhoneGap的文章不是很多,有的一些也是抄抄写写,或者使用脚本来做,实际上PhoneGap上有一篇Get Start,写的不错,照着来非常简单。不过时间稍久下一次做又忘了,翻译在次,造福日渐老去记性不佳的自己与前途万丈的众人……

1. 工具

  • Eclipse 3.4+

2. SDK + PhoneGap

更多