吴昊品游戏核心算法 Round 17 —— 吴昊教你玩拼图游戏 序

 


  如图所示,此人就是《死亡笔记》中最终击败夜神月的尼亚(当然,他在击败夜神月的过程中,利用了梅洛的一些帮助),尼亚喜欢玩各种玩具,比如乐高啊,多米诺骨牌啊等等,当然,他最喜欢的仍然是拼图。他的推理有时候就像拼图一样,他总是可以冷静地打量着各种高不可攀的谜题,并最终破解之。关于尼亚和梅洛之间的关系,我到现在仍然觉得是友谊高于敌对。因为,没有梅洛的特别援助,尼亚最终也无法解开夜神月的“假笔记”的陷阱,也就是说,尼亚的拼图,最终是靠着梅洛的牺牲完成的。
 
  
 

  图为尼亚的拼图游戏(尼亚的另外两个道具,也就是筛子和多米诺骨牌,我会在后面的系列中阐述到)。这种拼图游戏是以数量来体现其难以程度的。因为,其摆放可以任意地变动,也就是说,只要有可能,你甚至可以将所有的小方块拿在手中,所以说,如果这样的方块的数量有限的话,难度倒是不算太大。而且,你可以根据有些方块的具体形状来判定它处在整个图片中的哪个位置,比如,如果有两条边是完整的话,那么肯定是角上的,如果只有一条边完整的话,那么肯定是边上的,如果四条边全部都是不完整的话,那么一定就是中间的了。

   
在电脑游戏中,那种图形不规整的方块游戏不是经常会遇到,更多地,会以上图来呈现。如图所示,这是一个来自日本的拼图游戏,整个图片拼接好之后,可以组成一个完整的“尼亚”的原型。


 
但是,如果游戏单单做到这种程度,会变得异常简单。看上去,如果一个一个实验的话,会有O(9!)种情况,但是,如果我们仔细一想,就会发现,有一些基本的图片是可以很快定位的,比如,尼亚的头部肯定在上方,头发下面的手肯定连着头发等等,这样,我们可以几乎是迅速地完成整个PUZZLE。所以,这样的游戏是没有游戏性的,因为玩通关实在是太简单,以至于玩家几乎没有任何的挫败感(话说,植物大战僵尸那款游戏在讲述他们的成功经验的时候恰恰相反,他们说他们故意将游戏的上手程度设置地较为简单,让玩家缺少挫败感,值得一提啊!)


  那么,如何来增加拼图游戏的游戏性呢?我们可以将其变成这种样子:

 
  此为一款android游戏上的拼图游戏,注意到这六张图片中有一个空缺的部分,我们可以利用这个空缺的部分来实现其余实心部分的移动。这样,图片不能被直接地安放在某个位置,必须要经过一些滑动操作才可以。我们可以借助这些滑动操作来实现图片的移动,但是,又因为滑动操作的局限性,我们在移动一张图片的时候,不能孤立地看待这么一个问题,而应该全局地看待一个问题,因为,你动了一块图片,其余的图片也会跟着被挪动。


  在更多情况下,我们会遇到如下两种情况的问题:

 
  这是一个“超人”的图片,我们通过中间的那个空缺的位置进行滑动。为了增强游戏的游戏性,我们设置了moves和seconds的EditText控件来记录玩家移动的次数和移动的总时间。

 
  这张图略微大些,与上图的“挑战性”相比,这里更强调一种便利玩家的“辅助性”。比如,我们在玩android上的连连看的游戏的时候,如果点击放大镜,软件会启动AI来帮助我们自动抹杀一对图片。这里类似,我们可以利用显示数字按钮的功能来将其转换为一个数字拼图问题,而让问题变得更简单。我们即使不知道哪个水果在哪个位置,也可以让这些数字从1排到15,最终通过预览栏来预览自己拼图的成果,也许也是别有一番成就吧!

  大家也许很快就注意到了,我摆放以上两张图片的深层次原因,因为8=3^2-1,15=2^4-1,OK?但是,不单单是这些,在算法中,这两张图分别被称为八数码问题和十五数码问题,当然,根据幂次还可以继续增加,但是,到此为止吧!15数码问题的有些Hard版就已经可以达到变态的地步了!如果再增加复杂程度的话,也许只适合尼亚这种天才少年。

 
  这是尼亚的眼睛,充满了睿智与机警。在他与夜神月的交锋中,他的这些品质也让他屡次躲过了杀身之祸,最终战胜了超越L甚至是死神的月。尼亚的拼图游戏,则成为了日本动漫中比较叫座的周边产品。

 

 

  最后,我说下自己吧,参加了今年的编程之美全国挑战赛以及蓝桥杯,今天下午做了热身赛,感觉自己的系列木有白写啊!比如第一题,就是A+B,我在和吴昊一起玩推理的Round  11的《各种大数各种调》中阐述过了许多大数问题的做法,第二题,我在Round 6的《吴昊教你玩石头剪刀布》中阐述过,第三题,也就是DP那道题,也可以在我的系列的新年特别篇的《吴昊教你玩小鸟跳跳》中找到一些影子,感觉自己的系列没有白写呀!


    也希望,我的系列可以为自己之后的比赛带来好运吧!编程之美热身赛三题全AC...

 

  

 

转载于:https://www.cnblogs.com/tuanzang/archive/2013/04/04/3000005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值