贪吃蛇,俄罗斯方块的来历,背景??

Python020

贪吃蛇,俄罗斯方块的来历,背景??,第1张

这一人们喜闻乐见的游戏成功的秘诀,在于抓住了我们重复排列与使用的心理乐趣。几何图形从屏幕上方缓缓降落,你要做的就是控制其降落方式,并与其他图形排列消除。游戏的初衷很简单,但加上了令人上瘾的背景电子音乐后(据说来自俄罗斯民谣Korobeiniki),人们的娱乐生活发生了翻天覆地的变化。自从1986年俄罗斯方块问世后,这一简单的游戏耗去了玩家数百万个小时。从那时起,从《使命召唤》到《魔兽世界》,游戏操纵平台的外观和性能都在茁壮发展。但像俄罗斯方块这样的方块益智类游戏,始终占据了我们心中的一席之地。为何它们如此经久不衰呢?作家杰弗里·戈德史密斯是沉迷于俄罗斯方块不能自拔,乃至于他写了一篇著名的文章,文中提到俄罗斯方块的发明者阿里克谢·帕吉诺特夫,是否发明了一种“瘾药”——让人可以玩出瘾。一些人说自己连玩了几小时俄罗斯方块后,连梦里都会出现降落的方块,还有看街上的大楼都在移动——这是一种名为“俄罗斯方块效应”的现象。这是游戏产生的心理推动作用,还有建议称那些患有创伤后精神紧张性障碍的人们,需要预防游戏产生的幻觉重现。当我十几岁的时候,也有过一段俄罗斯方块沉迷期,我花了很多时间在方块的排列组合上。最近,我开始反思为什么俄罗斯方块这类游戏能够长青。说说我的结论吧,植根人们心中的心理驱使作用,是整理这些方块的关键。很多游戏的宗旨大体都是整理消除。落袋台球(snooker)就是典型的例子(对于非英国人来说叫做pool)。第一个人把球打乱后,其他人依照不同规则轮流将球射入落袋里。俄罗斯方块在这一基本框架中,加入了电脑控制的成分——不光是玩家要整理方块,电脑还会不断从上方扔下额外的方块来制造凌乱。游戏看起来就是整一个漫无目的的过程,完全没有寓教于乐的成分在内,也没有深远的社交或是心理意义,但是我们却意外地为此着迷。这当中存在着一种名为“蔡加尼克效应”的典型心理现象,命名自俄罗斯心理学家布鲁玛·蔡加尼克。19世纪30年代,蔡加尼克在一家人来人往的咖啡馆里,发现服务员的记忆力都很惊人——但是只能保持到餐点送到为止。他们能记住一桌12人点的东西,不过一旦食物和饮料上桌后他们立马忘得一干二净,也回想不起之前稳固的记忆。蔡加尼克将这种把未完成的任务坚持保留在记忆中的现象,以自己的名字命名。蔡加尼克效应也是智力节目如此受欢迎的原因之一。你可能不关心英国广播公司是在几几年成立的,或者全球至少有一家麦当劳的国家占了多少,但是一旦出了这样的问题,不知道答案居然就会浑身不舒服(顺便答案是1927年和61%)。问题在被解答前一直会缭绕在脑海中。游戏原理俄罗斯方块通过不断创建任务而牢牢抓住我们的神经。游戏中的每个环节都引领者我们解决谜团,排成或完成一列后图形会消失,但是新的也在不断出现,周而复始。部分解决与新形成的任务链用来打发时间很方便,反复的满足与焦虑感填满了每时每刻。另一个俄罗斯方块风靡的原因在于,未完成的任务与潜在的解决方法并存——徐徐降临的每一种方块都有各自的安插方式。俄罗斯方块是一个简单的可视世界,通过操纵五个按键(当然是向左、向右、左转、右转和降落)能够迅速地得出解决方案。对俄罗斯方块玩家的研究结果显示,人们普遍喜欢通过旋转方块来看它们是否匹配,而不是一边看着方便降落一边思考。当然这两种方法都可行,但在俄罗斯方块的世界里永远是动作领先——这是吸引人的关键。和生活中不太相同的是,俄罗斯方块将我们处理问题时的所见所想直接联系到了一起,我们能立即对问题采取行动。蔡加尼克效应是对一种现象的形容,但它无法解释起因和作用。这是心理学家常用的把戏,看似他们通过命名而解开了人类的难解之谜,其实他们所做的仅仅是贪心地用自己的名字命名,而根本没解决问题。对这一现实的合理解释是,大脑回路在达成目标的过程中会重组。如果这一目的达成,思路就会转移到其他事物上。益智游戏利用心理达标原理,不断挫败我们直至我们满意。俄罗斯方块则更进一步在失败与成功之间创建了持续的链条。正如聪明的寄生虫一般,俄罗斯方块善于利用人们完成与再使用的心理乐趣。我们一边玩着一边短暂地陶醉于排列方块的乐趣中,哪怕我们人格中理智与成熟的部分明白,这基本上是个毫无意义的.

Python版本: 3.6.4

相关模块:

pygame模块;

以及一些Python自带的模块。

安装Python并添加到环境变量,pip安装需要的相关模块即可。

贪吃蛇的 游戏 规则应该不需要我多做介绍了吧T_T。写个贪吃蛇 游戏 其实还是很简单的。首先,我们进行一下 游戏 初始化:

然后定义一个贪吃蛇类:

其中head_coord用来记录蛇头所在位置,而tail_coords是一个二维数组,用来记录所有蛇身的位置。一开始,贪吃蛇长为3,并且位置是随机生成的。用户通过 键来控制贪吃蛇的行动:

需要注意的是,贪吃蛇不能180 大拐弯,只能90 地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。具体而言,代码实现如下:

然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:

在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:

同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:

最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时, 游戏 结束:

并显示一下 游戏 结束界面:

玩家通过 键控制 游戏 的主角吃豆人吃掉藏在迷宫内的所有豆子,并且不能被鬼魂抓到。

若能顺利吃完迷宫内的所有豆子并且不被鬼魂抓到,则 游戏 胜利,否则 游戏 失败。

逐步实现:

Step1:定义 游戏 精灵类

首先,让我们先来明确一下该 游戏 需要哪些 游戏 精灵类。

① 墙类

② 食物类(即豆豆)

③ 角色类

角色类包括吃豆人和鬼魂,鬼魂由电脑控制其运动轨迹,吃豆人由玩家控制其运动轨迹。

显然,其均需具备更新角色位置和改变角色运动方向的能力,其源代码如下:

Step2:设计 游戏 地图

利用Step1中定义的 游戏 精灵类,我们就可以开始设计 游戏 地图了。由于时间有限,我只写了一个关卡的 游戏 地图,有兴趣的小伙伴可以在此基础上进行扩展(在我的源代码基础上进行扩展是很方便滴~)。 游戏 地图的设计包括以下四方面内容:

① 创建墙

② 创建门(一开始关幽灵用的)

image.gif

③ 创建角色

④ 创建食物

因为食物不能和墙、门以及角色的位置重叠,所以为了方便设计 游戏 地图,要先创建完墙、门以及角色后再创建食物:

Step3:设计 游戏 主循环

接下来开始设计 游戏 主循环。首先是初始化:

然后定义主函数:

其中startLevelGame函数用于开始某一关 游戏 ,其源代码如下:

showText函数用于在 游戏 结束或关卡切换时在 游戏 界面中显示提示性文字,其源代码如下: