按月归档:2011年七月月

用Python和Pygame写游戏-从入门到精通(14)

上一次稍微说了一下AI,为了更好的理解它,我们必须明白什么是状态机。有限状态机(英语:finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。太抽象了,我们看看上一次的机器人的状态图,大概是长的这个样子:

状态机

状态定义了两个内容:

  • 当前正在做什么
  • 转化到下一件事时候的条件

状态同时还可能包含进入(entry)退出(exit)两种动作,进入时间是指进入某个状态时要做的一次性的事情,比如上面的怪,一旦进入攻击状态,就得开始计算与玩家的距离,或许还得大吼一声“我要杀了你”等等;而退出动作则是与之相反的,离开这个状态要做的事情。

我们来创建一个更为复杂的场景来阐述这个概念——一个蚁巢世界。我们常常使用昆虫来研究AI,因为昆虫的行为很简单容易建模。在我们这次的环境里,有三个实体(entity)登场:叶子、蜘蛛、蚂蚁。叶子会随机的出现在屏幕的任意地方,并由蚂蚁回收至蚁穴,而蜘蛛在屏幕上随便爬,平时蚂蚁不会在意它,而一旦进入蚁穴,就会遭到蚂蚁的极力驱赶,直至蜘蛛挂了或远离蚁穴。

尽管我们是对昆虫建模的,这段代码对很多场景都是合适的。把它们替换为巨大的机器人守卫(蜘蛛)、坦克(蚂蚁)、能源(叶子),这段代码依然能够很好的工作。

游戏实体类

这里出现了三个实体,我们试着写一个通用的实体基类,免得写三遍了,同时如果加入了其他实体,也能很方便的扩展出来。

一个实体需要存储它的名字,现在的位置,目标,速度,以及一个图形。有些实体可能只有一部分属性(比如叶子不应该在地图上瞎走,我们把它的速度设为0),同时我们还需要准备进入和退出的函数供调用。下面是一个完整的GameEntity类:
更多

[转]您知道这是什么的,对吧!

道德经第一章 道可道,非常道。名可名,非常名。 无,名天地之始,有,名万物之母。故常无,欲以观其妙; 常有,欲以观其徼(jiào)。 此两者同出而异名,同谓之玄,玄之又玄,众妙之门。
第二章 天下皆知美之为美,斯恶矣。皆知善之为善,斯不善矣。故有无相生,难易相成,长短相形,高下相倾,音声相和,前后相随。是以圣人处无为之事,行不言之教;万物作焉而不辞,生而不有,为而不恃, 功成而弗居。夫唯弗居,是以不去。
第三章 不尚贤,使民不争;不贵难得之货,使民不为盗;不见(xiàn)可欲,使民心不乱。 是以圣人之治,虚其心,实其腹, 弱其志,强其骨。常使民无知无欲。 使夫智者不敢为也。为无为,则无不治。
第四章 道冲而用之或不盈,渊兮似万物之宗;挫其锐,解其纷,和其光,同其尘,湛(chén,通假字“沉”)兮似或存。吾不知谁之子,象帝之先。
第五章 天地不仁,以万物为刍(chú)狗; 圣人不仁,以百姓为刍狗。天地之间,其犹橐龠(tuóyuè)乎﹖虚而不屈,动而愈出。 多言数穷,不如守中。
第六章 谷神不死,是谓玄牝(pìn)。玄牝之门,是谓天地根。绵绵若存,用之不勤。
第七章 天长地久。天地所以能长且久者,以其不自生,故能长生。是以圣人后其身而身先;外其身而身存。非以其无私邪(yé),故能成其私。
第八章 上善若水。水善利万物而不争,处众人之所恶(wù), 故几于道。 居善地,心善渊,与善仁,言善信,政善治,事善能,动善时。夫唯不争,故无尤。
第九章 持而盈之,不如其已;揣(zhuī)而锐之,不可长保。金玉满堂,莫之能守; 富贵而骄,自遗其咎。功遂身退,天之道也。
第十章 载营魄抱一,能无离乎?抟(tuán)气致柔,能婴儿乎?涤除玄览(jiàn),能无疵乎?爱民治国,能无为乎?天门开阖,能为雌乎? 明白四达,能无知乎? 生之畜(xu)之。生而不有,为而不恃,长而不宰,是谓玄德。
第十一章 三十辐共一毂(gǔ),当其无,有车之用。 埏埴(shān zhí)以为器,当其无,有器之用。凿户牖(yǒu )以为室,当其无,有室之用。故有之以为利,无之以为用。
第十二章 五色令人目盲,五音令人耳聋,五味令人口爽,驰骋畋(tián)猎令人心发狂,难得之货令人行妨。是以圣人为腹不为目,故去彼取此。
第十三章 宠辱若惊,贵大患若身。何谓宠辱若惊?宠为下,得之若惊,失之若惊,是谓宠辱若惊。 何谓贵大患若身? 吾所以有大患者,为吾有身,及吾无身,吾有何患?故贵以身为天下,若可寄天下;爱以身为天下,若可托天下。
第十四章 视之不见名曰夷,听之不闻名曰希,搏之不得名曰微。此三者,不可致诘,故混而为一。其上不皦(jiǎo),其下不昧。绳绳(mǐn mǐn)不可名,复归于无物。是谓无状之状,无物之象,是谓惚恍。迎之不见其首,随之不见其后。执古之道,以御今之有。能知古始,是谓道纪。
第十五章 古之善为士者,微妙玄通,深不可识。夫唯不可识,故强为之容:豫兮若冬涉川,犹兮若畏四邻,俨兮其若客,涣兮若冰之将释,敦兮其若朴,旷兮其若谷,浑兮其若浊。澹兮其若海;泊兮若无止。孰能浊以静之徐清?孰能安以久动之徐生?保此道者不欲盈,夫唯不盈,故能蔽而新成。
更多

其实你不懂CSS

写下这个冒天下之大不韪的标题时我就很心虚,宛若韦小宝大言不惭地对百岁的张三丰说“其实你不懂武功”一样。不过还好,张三丰们都有足够的境界,不会在意小辈们的放肆,况且,这个韦小宝是拿着高人前辈的秘籍在说事。

使用CSS就好像是一场战斗。每一种浏览器都有它们独特的CSS理解方法(这里特别点名Internet Explorer),于是我们就得面对数不清的CSS陷阱。同时,CSS又是一门威力巨大的绝学,用好了惊世骇俗,一个不小心,就会走火入魔,你的作品和你的人就会毁于一旦,万劫不复。

其实你不懂CSS

1、无视浏览器兼容性

这个可能是WEB开发问题中的No.1,我们的目标,首先是没有蛀牙和把Layout转换为HTML+CSS,然后我们得保证我们的作品在所有的客户那里看起来都一样,不过他们是爪哇人还是火星人,也不管他们用的是什么浏览器。达成这个终极目标需要惊人的天赋和毕生的修炼——还不一定能成功。因为IE和FF(为代表的一系列浏览器)对CSS的解释有着国家主权级别的分歧,无人可以等闲视之。这一对不可调和的矛盾,经历时间的历练,总算是好了很多,然而依然是矛盾冲突的最大和最根本的原因。

我们能做和应该做的,就是在最喜欢的浏览器里实现我们的伟大蓝图的同时,在其他浏览器中不断检查。记住各种浏览器的喜好憎恶,记住无数规则来让页面尽量一致。同时还要记住,即便是同一个浏览器的不同版本,甚至同一版本的浏览器的不同操作系统间,我们都不能放松警惕。

2、不考虑小分辨率屏幕

做WEB开发的人往往有很大的面子,但是记住客户不一定会有!

调查你会面对的客户的屏幕大小范围再给出合适的设计(试试Google Analytics),否则的话,在800×600 ~ 1920×1080的巨大鸿沟之中,一切绝色网页都会变成明日黄花。

在美国,一位母亲在圣诞节前夕带着五岁的儿子去买礼物。大街上回响着圣诞节的赞歌,橱窗里装饰着枞树彩灯,乔装的可爱小精灵载歌载舞, 商店里五光十色的玩具应有尽有。
“一个五岁的男孩儿将会以多么兴奋的目光观赏这绚丽的世界啊!”母亲毫不怀疑地想。
然而,她没有想到,儿子却紧拽着她的大衣角,呜呜地哭出声来。
“怎么了?要是总哭个没完,圣诞精灵可就不到咱们这儿来啦!”母亲有些生气,语气中充满了严厉。
“我,我的鞋带开了……”儿子怯怯地回答。
母亲不得不在人行道上蹲下身来,为儿子系好鞋带。母亲无意中抬起头来,啊,怎么会什么都没有?!——没有绚丽的彩灯,没有迷人的橱窗, 没有圣诞礼物,也没有装饰丰富的餐桌……那些东西都放得太高了,孩子什么也没看见。落在孩子眼里的,只有粗大的脚印和妇人们低低的裙摆,在那里互相摩擦,碰撞,过来往去……真是好可怕的情景!
这是母亲第一次从五岁儿子的高度看世界。她感到震惊,立即把儿子抱起来,放在自己的肩上,儿子开心地笑了起来:“妈妈,好漂亮的圣诞节啊!”

记住,你所看到的未必就是别人能看到的。

3、从不考虑框架

更多

未来的图片格式?

人类已经无法阻止互联网的进一步发展了,互联网必将高度发达从而产生智能了,人类再无法避免被互联网统治的那一天,大家一生下来就被放在培养液里,生命活动产生能量供电脑使用……不过这应该是很久以后的事情了,没准也只会在头脑中,大家不必惊慌,我们现在只要享受它给我们带来的好处就是了。稍微介绍下两种新兴的图片格式~

WebP

1.sm
上面两张图分别为是JPEG(43.84K)和WebP(29.61K),当然如果你用的如果不是Chrome浏览器,估计是看不出第二图的。如果你能看到的话,可以发现这两张图基本没有任何差别。
WebP,一种采用有损压缩(Lossy Compression)技术的图像格式,是Google公司基于On2 Technologies公司 WebM 格式而派生出的计划,其中包含了 VP8 图像数据。它的图像文件大小平均比JPEG格式缩小39%,而且肉眼几乎无法分辨差异。Google估计全球网页流量里有65%都被图片文件所占据,所以将这65%再压缩40%,显然可以让网页打开速度更快。

它的原理是,软件通过查看原图像的一个十六个像素的数据块,并保持原图像的像素色彩,然后将其他格式的图像转换成Webp格式。基于前面的数据块这个软件估算出与其相邻数据块的像素值。最后,在下一个数据块中它将估算值和真实值相比较。如果这个Webp算法的估值正确,那么图像压缩文件就不需要增加任何其他额外数据。 只将那些不同于估算值的像素值记录下来。

结果就是绝大数时候同一个图像存储在Webp中的像素值比存储在JPEG中的少多了。当一个互联网用户利用兼容Webp格式的浏览器下载图片时,他的浏览器就会利用相同的算法估算很多像素值,然后填充上与算法估算值不吻合的储存在Webp格式文件中像素值。 Webp浏览器可以利用数学计算出各个图像的颜色这样就不用去下载很多的图像。而事实证明即使是在高速互联网中估算像素颜色比直接下载它们要快的多。不过WebP的算法要比JPEG慢8倍,虽然Google觉得这不是个问题,总是让人感觉有的不自在。

APNG

再来看看新的动画格式,GIF诞生了很多年,网上的小动画基本就是靠GIF来完成的,事实上在Flash诞生以前,GIF基本就是唯一的动画表现方式了。

不过众所周知GIF有一个致命弱点——只支持256色,在如今真彩泛滥的时代,这样的图片效果实在无法让人满意。而现在最受设计者欢迎的便是PNG了,无损压缩,支持透明,效果绝佳!可惜PNG不能制作动画,为此一帮有才的人,为PNG加入了动画功能,APNGAnimated Portable Network Graphics)孕育而生。来看看效果:

clockclock

分别为GIF(26371 bytes)和APNG(23680 bytes)效果如何?如果你的浏览器支持APNG,你会发现APNG比GIF更为光滑,尺寸也更小;如果不支持,那么就只能看到一幅静态的画面了(这一点还算客气,总算能看到点什么)。

APNG扩展自PNG的位图动画格式,扩展方法类似主要用于网页的GIF 89a,仍对传统PNG保留向下兼容。第1帧是标准的单幅PNG图像,因此只支持原版PNG的软件能正常显示第1帧。剩余的动画帧和帧速数据储存在符合原版PNG标准的扩展数据块里。

现在只有Firefox原生支持APNG,虽然这个格式2004年久诞生了……作为Chrome迷,自然希望能在Chrome上看到APNG动画,有人帮我们做好了,装上这个扩展,我们也能在Chrome中享受高质量动画啦~

互联网一直没有被那个集团掌控,可以说是互联网的幸运;但是也就失去了强有力的标准,每个公司每个人都能在里面捞点什么放点什么,好的东西未必能立刻被使用起来,而不怎么样的东西占着位怎么也不肯放手,看着真心急啊……

21个酷毙了的HTML5演示

再介绍几个HTML5的实例,相信各位看了,一定会大叫,“WoW!”。我是用Chrome浏览器观看确认过了,其他的浏览器不知道能不能正常观看……

1、8位图像循环

这个演示可以产生惊人的动画效果,潺潺流水声加256色画面,不过看样子每一帧都可以使用独立的调色板,所有实际的动画效果要比单独的GIF好的多。

2、粒子字符动画

可以根据输入实时的生产动画,也许不是那么酷,但是很有含量。
更多

HTML5中的Canvas(绘制)

Canvas中不仅可以画线(路径),还能画很多其他的图像,这一章就介绍Canvas的其他两种绘图API。

矩形

我们在上一章只用线来画了一个矩形,其实可以一下子就画出来的,用下面函数:

  • ctx.fillRect(x, y, width, height)
    画一个填充的矩形,x, y是矩形左上坐标,剩余两个不是右下坐标而是宽度和高度。
  • ctx.strokeRect(x, y, width, height)
    类似的,不过只画线不填充。
  • ctx.clearRect(x, y, width, height)
    把指定的区域删除。

我们先准备三个Canvas,(html代码如下):

然后是我们的绘图参数:

结果如下图所示,就不提供实际的演示文件了,请自己输入确认。

上一次我们使用线绘的时候,还是用了fill和stroke方法,现在是不需要的。

圆(弧)

更多

用Python和Pygame写游戏-从入门到精通(13)

我们已经学习了游戏的图像和输入编程,接下来是什么?声音?没错,不过我们要晚一点再说声音。游戏中还有什么那么重要?哦是的,趣味性。

游戏的趣味是游戏生命的重要组成部分,其重要性甚至凌驾于任何元素,包括画面之上,之所以大家不太想得到,是因为这是个比较难定量的东西,难以直接用个什么方法测量出来。那么支持游戏趣味的是什么呢?是规则智能

规则是游戏的玩法,比如围棋,尽量扩大自己的领地;比如俄罗斯方块,把不同的方块组合起来,不留缝隙;再比如粘土世界,把小球连起来到达目的地。这就是游戏规则的具体体现,好的规则简单让人很容易理解,但是又能产生足够多的变化让我们无法穷尽它的方方面面。书写好的规则是天才或者干脆上天干的事,本系列文章还无法触及,请读者自己修炼了……

我们要学习游戏的另外一个支撑物,智能,或者帅气一点称为AI(Artificial Intelligence,人工智能,因为游戏里的智能肯定是人赋予的)。玩家操作我们自己的角色,那么NPC(nonplayer characters)呢?交由AI去操作,所以如果游戏中有何你相同地位的角色存在的话,你就是在和AI对垒。智能意味着对抗,“与人斗其乐无穷”,就是因为人足够聪明,要想“玩游戏其乐无穷”,我们都得赋予游戏足够的AI。
更多

VC版极影使用手册

这一篇是对“VC版极影”一般使用者的说明,若想知道更多技术细节和历史背景,请参考VC版极影开发手记

VC版极影

这个东西说来话长,我是用惯了VeryCD的人。看上面的动漫,一般一个新番就跟着一个字幕组走(否则翻译乱糟糟),本来的方法是用收藏夹把正在连载的项目都收藏起来,然后每天晚上回去,把收藏夹里的内容全部打开(多的时候2、30个吧,那时候还在用遨游这个常年假死的浏览器……),一个一个检查,相当麻烦。后来VeryCD有了收藏夹功能,只要收藏一下,有了更新自然会得到通知,很好很强大!

就这样用了很多年,慢慢的我发现,虽然我把VC上所有的节目都看过了,偶尔逛一下论坛还是会发现很多自己都没听过的新番,然后就明白了,VC原来是个非常和谐的地方,稍微有点少儿不宜的作品是没法放上去的……这以后我就时不时到极影去搜罗一下,看到什么感兴趣的也下下来观摩一下。可惜极影的作品发表太乱了,各个字幕组的作品都混在在一起,要不停的使用搜索排序才能搞定,所以一直没法彻底转移过去。

突然有一天,电驴大全出现了……整个VC变得我都不认识了,想着是不是去适应一下,后来发现貌似上面投递作品的字幕组都变少了,烂尾的变多了。这才想着,要不彻底转战极影吧~虽然极影没有VC那种方便的收藏功能,咱自己做一个不就好了?这就是VC版极影的诞生由来。

我想大家如果使用,第一个注意到的应该就是那简朴无比的界面了,是的,我也感觉很不好意思!不过一开始是考虑自用的(本地的一个程序),后来想也许有和我有一样需求的朋友,就把这个功能给网页化放到主机上了,要不要弄漂亮点得看用户需求吧~要都没人用,我何必给自己找麻烦呢:)

这个主机是买的justhost的,感觉快的时候还行,慢的时候很崩溃(而慢的时候又居多),所以想做的简单点也可以加快一下访问速度,暂时就是这么考虑的。但是实际看了一下,感觉没点图片和介绍,实在太过分了。如果有人提出类似的要求,我会加上图片,主题也试着改的更漂亮点~
更多

windows上gvim的编码设置

这个问题困扰我多年,Windows系统默认的编码是cp936,所以用gvim一打开文件,默认是用gb2312编码打开的。我写的程序代码里,如果出现unicode文字的话,基本都会设置为utf8,所以每次都得手动设置一下”set enc=utf8″,很麻烦,写到_vimrc里的话,打开gvim菜单、提示都成了乱码,虽说用惯了快捷键没有菜单也无所谓,提示的话换成英文也能凑合,但总有一种很失败的感觉……

也研究了一段时间,这篇VIM乱码原因与解决方案写的是不错的,可是他说的我基本都明白,重要的GUI界面乱码的问题没有解决。

今天很无意的看到这篇文章,vim、gvim在windows下中文乱码的终极解决方案,很灵光,治好了我多年的老顽疾!特此摘录,以示纪念和感激。

原来菜单乱码只需要重新source一遍就好了么,真没想到。

用Python和Pygame写游戏-从入门到精通(12)

按照原计划,这次是要讲解手柄的,pygame有着良好的控制手柄支持pygame.joystick,不过…… 我们暂时的目标是制作小游戏,小游戏晚了不少感觉使用手柄的好像还没看到过,用了感觉实在有些高深了。

有鉴于此,这一章先保留,后期需要的话再追加。绝对不是偷懒!真的,我很勤快的,真的不是偷懒~~

>> 用Python和Pygame写游戏-从入门到精通(13)