很棒的作品,打个包发我一下吧,[email protected]____________
卜咯米WEB设计

解决方案 »

  1.   


    其实就是一个图的遍历:1、在迷宫中任意选一个点作为起点;
    2、把起点作为当前点;
    3、检查迷宫中是否还有未遍历到的点,如果所有点都已遍历过,跳到步骤10;
    4、把当前点记录到遍历历史记录中;
    5、取得当前点周围(上、下、左、右)还没遍历过的点的位置,记录为数组A1;
    6、如果A1长度为0,跳到步骤9;
    7、从A1中随机取一个点作为当前点;
    8、回到步骤3;
    9、退回到历史记录中的上一个点;
    10、遍历完成。然后再根据遍历结果生成迷宫。
    关于每个格子的数据,是这样记录的:每一个格子有4条边,每条边有两种状态(可通过、不可通过),所以每个格子有2^4=16种状态。
    将可通过记为1,不可通过记为0,每个格子的4条边,按上、右、下、左的顺序分别作为一个二进制数字的个、十、百、千位,这样,每一个格子的状态都可以用一个数字来表示。比如:1001表示这个格子的上边、左边可以通过,右边、下边不可以通过。当然,代码中这个数字是用10进制来表示的,每个格子的状态可能是0-15中的某个数,比如1001即是2^3+2^0=9。判断每个格子某个方向是否能通过时是这样的:
    因为上、右、下、左四个方向分别代表二进制数字的个、十、百、千位,即2^0、2^1、2^2、2^3,即1、2、4、8,所以,判断一个格子的某个方向是否能通过时,只需要将那个格子的状态数字与对应方向的数字按位与,如果结果不为0则说明可以通过,比如:格子的状态数字是9,
    判断是否能从上边通过:9 & 1 = 1,即可以通过;
    是否能从右边通过:9 & 2 = 0,即不可以通过;
    下边:9 & 4 = 0,即不可以通过;
    左边:9 & 8 = 9,即可以通过。主要思路就是上面这些。
      

  2.   

    9 & 8 = 8,上面写错了。
      

  3.   


    是啊,正在考虑怎么优化,呵呵。另外,如果在Chrome浏览器里生成会感觉比较快,Chrome浏览器的JS引擎果然厉害。
      

  4.   


    添加了下载地址,可以在 http://www.sansi.org/toy/mg/mg.html 右上角看到。
      

  5.   


    下载地址又移到左下角去了,呵呵。页面布局可能会不时地有调整,下载地址固定为:http://code.google.com/p/sansi/downloads/list
      

  6.   

    呵呵,不错...看了下代码,可以用外挂:javascript:mg.me.moveTo(mg.grids.length-1); 

      

  7.   

    最新的关键部分代码见:http://code.google.com/p/sansi/source/browse/trunk/wwwroot/toy/mg/js/mg.js