g99 发表于 2009-2-5 14:42:54

如何围困小猫

http://bbs.zipei.com/flash-Sleepy_Cat-%CE%A7%C0%A7%D0%A1%C3%A8.html

怎么才能围困住小猫?

风云剑 发表于 2009-2-5 14:55:14

先拦住外围

无心人 发表于 2009-2-5 15:24:19


    猫这种善良温柔精灵式的动物你们......

northwolves 发表于 2009-2-5 15:35:14

还有点意思

litaoye 发表于 2009-2-7 23:13:42

终于进入前10了,不过没让我写名字,可能得是用户才行!

g99 发表于 2009-2-11 11:31:17

也是高手阿

KeyTo9_Fans 发表于 2010-2-13 21:52:41

前十名越炒越高。

现在1万分都进不了了。

还是听无心人的劝告吧。

猫这种善良温柔精灵式的动物我们还是不要那个了。

winxos 发表于 2010-10-7 19:35:17

1# g99
突然想起来一年多前老兄问的这个问题,
现在彻底搞清楚了,
打几十关没什么问题。

winxos 发表于 2010-10-7 19:36:03

5# litaoye

这个是我打的。

winxos 发表于 2010-10-7 19:38:28

我对这个游戏反编译了一下,
得到了小猫的策略,
修改了变量的名字(反编译出来的名字没有意义),添加了注释后的猫主要策略函数如下:function get_nearest() //得到最近的出去的信息
{
    var available_area;
    var rnd_index;
    cel.steps = 0;
    lx = catx;
    ly = caty;
    var current_available_Max = 1;
    var MAX_STEPS = 999;
    for (steps = 1; steps < 200; steps++) //全部地图区域
    {
      available_area = 0;
      for (var i = 0; i < current_available_Max; ++i)
      {
            var current_X = lx;
            var current_Y = ly;
            for (var j = 0; j < 6; ++j) //六个方向
            {
                var tmp_catx = current_Y % 2 ? (current_X + addx1) : (current_X + addx0); //得到周围6个区域坐标
                var tmp_caty = current_Y + addy0;//得到周围6个区域坐标
                if (cel.stat != 1) //不可走
                {
                  continue;
                } // end if
                if (cel.steps >= 0) //是否已经走过
                {
                  continue;
                } // end if
                cel.steps = steps;
                lx2 = tmp_catx; //lx2,ly2记录下猫的模拟运行路线
                ly2 = tmp_caty;
                ++available_area;
                if (cel.win && steps < MAX_STEPS) //遍历全部路径,求到最短赢的路线
                {
                  MAX_STEPS = steps;
                } // end if
            } // end of for
      } // end of for
      if (available_area == 0)
      {
            break;
      } // end if
      for (var i = 0; i < available_area; ++i)
      {
            lx = lx2;
            ly = ly2;
      } // end of for
      current_available_Max = available_area;
    } // end of for
      
      
    if (MAX_STEPS == 999)
    {
      return (0);
    } // end if
      
    available_area = 0;
    for (var i = 0; i < ymax; ++i) //求得全部最短路径点
    {
      for (var j = 0; j < xmax; ++j)
      {
            if (cel.steps == MAX_STEPS && cel.win)
            {
                lx = j;
                ly = i;
                ++available_area;
            } // end if
      } // end of for
    } // end of for
    if (available_area == 0) //最短路径点个数
    {
      return (0);
    } // end if
    rnd_index = Math.floor(Math.random() * available_area);
    rnd_available_X = lx;
    rnd_available_Y = ly;
    for (var i = 0; i < 200; ++i) //随机选择一个最优路线起点行走
    {
      available_area = 0;
      for (var j = 0; j < 6; ++j)
      {
            tmp_catx = rnd_available_Y % 2 ? (rnd_available_X + addx1) : (rnd_available_X + addx0);
            tmp_caty = rnd_available_Y + addy0;
            if (cel.stat != 1)
            {
                continue;
            } // end if
            if (cel.steps >= cel.steps)
            {
                continue;
            } // end if
            lx = tmp_catx;
            ly = tmp_caty;
            ld = j;
            ++available_area;
      } // end of for
      if (available_area == 0)
      {
            return (0);
      } // end if
      rnd_index = Math.floor(Math.random() * available_area);
      rnd_available_X = lx;
      rnd_available_Y = ly;
      if (cel.steps == 1) //最后出去的时候
      {
            catx = rnd_available_X;
            caty = rnd_available_Y;
            catdir = 0;
            for (var j = 0; j < 6; ++j)
            {
                tmp_catx = rnd_available_Y % 2 ? (rnd_available_X + addx1) : (rnd_available_X + addx0);
                tmp_caty = rnd_available_Y + addy0;
                if (cel.steps == 0)
                {
                  catdir = (j + 3) % 6;
                } // end if
            } // end of for
            return (1); //游戏结束
      } // end if
    } // end of for
    return (0);
} // End of the function
页: [1] 2
查看完整版本: 如何围困小猫