>>华容道
先来玩一玩吧
html版(鼠标点一点吧,发现bug截图发给作者)
flash版(鼠标点一点吧,发现bug截图发给作者)
>>原理
华容道有很多种开局方式,本文用的是最经典的是开局方式——横刀立马,也是最难的。0横无解,1横到5横,横的越多,越简单。如果横刀立马实在解不出来,又不想看教程,可以试试两横的开局,两横不会试试3横,然后4横,5横,5横要是再不会,自己面壁去吧。
这里不放解法教程了,百度一下,有很多,还有图解。81步解法。
简单说一下游戏的制作思路:
1、新建一个4*5的数组,对应图上的位置,1代表曹操占4个位置,2代表关羽占2个位置,张飞、赵云、马超、黄忠也是占2个位置,都用3表示,兵占一个位置用4表示,空余两个位置用0表示。
var map=[ [3,3,3,3,4], [1,1,2,4,0], [1,1,2,4,0], [3,3,3,3,4] ];
2、定义4种元件:曹操、关羽、赵云、兵。每种元件都有一个位置索引p=[i,j],占位a(如兵.a=[[0,0]],曹操.a=[[0,0],[1,0],[1,1],[0,1]]等)。
3、根据数组的值创建并摆放元件。这里注意:每创建一个元素(item)的同时除了把数组中(i,j)的值设置为元素(item)的引用外,根据元素(item)的占位a的值,把(i,j)周围相应的位置也设置为元素(item)的引用。设置完是这样的:
[张飞,张飞,赵云,赵云,兵1],
[曹操,曹操,关羽,兵2,0],
[曹操,曹操,关羽,兵3,0],
[马超,马超,黄忠,黄忠,兵4],
上面的两个“张飞”指向同一个元素。4、侦听鼠标点击,根据点击位置计算对应的数组中的索引坐标(i,j),如果(i,j)处是元素,则选中元素;如果(i,j)处是0,并且之前已经选中了元素,判断选中的元素是否能够移动到(i,j);具体判断方式直接看代码吧(实在不知道怎么表达了)。>
5、判断过关。判断过关比较简单,只要判断曹操的位置是否到出口位置即可。