码迷,mamicode.com
首页 > 其他好文 > 详细

2048 Puzzle游戏攻略

时间:2014-12-22 09:27:52      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:算法

2048 Puzzle是当前很火的一款手机游戏。在地铁上会经常会看到有人在玩这个游戏。

首先,简单地介绍一下2048 Puzzle游戏。游戏的界面是一个4X4方格,每一个方格中可以放置一个数字。有四种移动数字的方法,向左、向右、向上、向下。当向一个方向移动时,所有的数字都会向这个方向移动,直到前面到了边界,或者有数字挡住。并且在移动方向,相连方格中相同的数字将会被合并。每次移动后,会随机在空白方格中出现2或者4数字,也有可能不出现。

成功条件:合出数字2048。

失败条件:所有方格中都有数字,并且无论采用哪一种方向移动,都无法合并数字(没有相连格子中数字是一样的)。也就是四个方向都给堵死。

技术分享

攻略是按照规则说明保持下面四个规则,并且避免出现接下来会提到的两个异常形。

规则1)在左上角方格中总是放置最大的数字,并且在第一列中上面方格中的数字总是不比下面的数字小。(这个规则是必须要遵守的,另外注意这是镜像对称了,为了表述方便,我就直接以左上角为例了,下面的规则描述是同样)

规则2)第一列中的所有方格都有数字。(这个规则可能不能总是保持。在游戏过程中,有可能会被破坏,但要尽快恢复这个规则)

如形1和形2。其中形1是满足规则1和规则2,而形2只满足规则1。

形 1

512

32

   

256

16

   

128

8

   

68

   

2

形 2

512

32

   

256

16

   

128

8

   
     

2

保持规则1和2的方法是在游戏中总是保持只向左,向上和向下移动,而不向右移动。

规则3)尽量控制第二列的数字的大小。理想情况是第二列的所有数字都比第一列的小;最坏情况是第二列的数字出现比第一列第二排数字大的数字。(这个不是必须,但是如果尽量保持这个规则,可以有利于第一列数字的增长)

如形3,在第二列出现了256和64。将会阻碍第一列数字的增长。

形 3

512

32

   

32

64

   

16

8

   

8

256 

 

2

保持规则3的方法是优先向第一列第四行方格中合并数字,并且如果第二列中数字有机会合并到第一列,则进行合并(注意要保持规则1)。这个只是一个指导方案,游戏中会出现很多情况,有可能有更好的选择,还需要随机应变。

如形4,先将第二列第四行数字合并到第一列第四行。

形 4

512

2

   

32

16

   

16

8

   

 2

2

 

2

如形5,将第二列第三行数字合并第一列第三行数字。

形 5

512

2

   

32

2

   

16

16

   

2

8

 

2

规则4)在第四列不要出现大于等于16数字,在第三列不要出现大于等于32的数字。(这个规则不是必须,但是可以有效防止不会被堵死)。

如形6,违反了规则4,我们只能合并左下角的两个2了。

形 6

512

4

32 2

64

2

16 8

32

16

64 16

2

8

2

2

 

两种异常形,一个我称为运行形,另一个称为无奈形。

1)运气形

除了向下以外,其它的方向都给堵死了。并且在左边只有三个方格有数字(不满足规则2)。如形7。

形 7

512

4

8

2

32

2

   

16

     
       

如果运气好,出现的2或者4数字不在左上角,则可以恢复规则1和2(这个也是我称它为运行形的原因)。如形8,是向下移动后运气不好,2出现在左上角,无法恢复规则1。

形 8

2

     

512

     

32

4

   

16

2

8

2

2)无奈型

除了向右以外,其它的方法都给堵死了。

一旦向右移动,如果出现数字2或者4,必然在左边出现。那么再想通过向右移动恢复规则1是很难的(只有一种很小概率会恢复,但我们无法指望这个发生,所有我称它为无奈形)。如形9,就是这种形,向左移动后变成形10,之后就无法保持规则1。

形 9

1024

8

   

512

64

   

32

4

   

16

8

   

形 10

   

1024

8

2

 

512

64

   

32

4

   

16

8

在我们游戏中要尽量避免出现这两种形,尤其是无奈形,一旦发生就很难恢复规则1。我想到的一个避免方式是感觉要出现这两种形,可以上下移动数次,多出现几个2和4数字,来避免出现这这两种异常形。

 

为什么要满足规则1和规则2

分析这个游戏,可以发现出现的数字都是2的n次幂。每次数字增长是幂次加1。如形11,左边一排有上到下依次是2a,2b,2c,2d。满足规则1说明,a>=b>=c>=d。

形 11

2a

     

2b

     

2c

     

2d 

     

由于每次数字的增长是幂次加1,所以每一个数字增长会经过方格中比它大的任何数字。所以如果我们保持规则1,就有机会在左边一排依次由下向上合并数字。

如果我们没有能保持规则1,那么就会增加游戏的难度,甚至最终导致四个方向都给堵死。如形12,不满足规则1 ,第一列第二行中的数字u是最大的数字512,第一列第一行中数字v是2,第一列第三行中数字w是256。如果数字u总是最大的数字。那么数字u和v不管以后如何变化,是很难合并在一起。就是巧合地合并在一起,但又会出现另外的两个数字被u给分隔。

形 12

2

8

   

512

16

   

256

     

32

   

2

有一个很特别的形在这讨论一下,如形13,两个512被1024给分隔开。如果没有新的数字2或者4出现,这个两个数字512是无法合并在一起。就算有2和4出现,也很难很巧合地合并在一起。虽然两个512很难合并成1024, 但是形5还是有可能成功的,因为游戏还会不停在移动过程中出现数字2或者4,所以可以合出第三个512和之前的512合并,并最终和1024合并成2048。

形 13

512

     

1024

     

512

     
       

 

最后要说明的是就是游戏过程中违反了规则1,不代表就不能成功了,只是会比较难。另外如果大家有更好的方法,可以一起交流。

2048 Puzzle游戏攻略

标签:算法

原文地址:http://blog.csdn.net/jeff_fangji/article/details/42075831

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!