找回密码
 欢迎注册
查看: 25299|回复: 12

[提问] 如何围困小猫

[复制链接]
发表于 2009-2-5 14:42:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
http://bbs.zipei.com/flash-Sleep ... A7%D0%A1%C3%A8.html 怎么才能围困住小猫?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-5 14:55:14 | 显示全部楼层
先拦住外围
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-5 15:24:19 | 显示全部楼层
天 猫这种善良温柔精灵式的动物你们......
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-5 15:35:14 | 显示全部楼层
还有点意思
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-7 23:13:42 | 显示全部楼层
终于进入前10了,不过没让我写名字,可能得是用户才行!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-2-11 11:31:17 | 显示全部楼层
也是高手阿
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-2-13 21:52:41 | 显示全部楼层
前十名越炒越高。 现在1万分都进不了了。 还是听无心人的劝告吧。 猫这种善良温柔精灵式的动物我们还是不要那个了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-7 19:35:17 | 显示全部楼层
1# g99 突然想起来一年多前老兄问的这个问题, 现在彻底搞清楚了, 打几十关没什么问题。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-7 19:36:03 | 显示全部楼层
5# litaoye scre.png 这个是我打的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-7 19:38:28 | 显示全部楼层
我对这个游戏反编译了一下, 得到了小猫的策略, 修改了变量的名字(反编译出来的名字没有意义),添加了注释后的猫主要策略函数如下:
  1. function get_nearest() //得到最近的出去的信息
  2. {
  3. var available_area;
  4. var rnd_index;
  5. cel[caty][catx].steps = 0;
  6. lx[0] = catx;
  7. ly[0] = caty;
  8. var current_available_Max = 1;
  9. var MAX_STEPS = 999;
  10. for (steps = 1; steps < 200; steps++) //全部地图区域
  11. {
  12. available_area = 0;
  13. for (var i = 0; i < current_available_Max; ++i)
  14. {
  15. var current_X = lx;
  16. var current_Y = ly;
  17. for (var j = 0; j < 6; ++j) //六个方向
  18. {
  19. var tmp_catx = current_Y % 2 ? (current_X + addx1[j]) : (current_X + addx0[j]); //得到周围6个区域坐标
  20. var tmp_caty = current_Y + addy0[j]; //得到周围6个区域坐标
  21. if (cel[tmp_caty][tmp_catx].stat != 1) //不可走
  22. {
  23. continue;
  24. } // end if
  25. if (cel[tmp_caty][tmp_catx].steps >= 0) //是否已经走过
  26. {
  27. continue;
  28. } // end if
  29. cel[tmp_caty][tmp_catx].steps = steps;
  30. lx2[available_area] = tmp_catx; //lx2,ly2记录下猫的模拟运行路线
  31. ly2[available_area] = tmp_caty;
  32. ++available_area;
  33. if (cel[tmp_caty][tmp_catx].win && steps < MAX_STEPS) //遍历全部路径,求到最短赢的路线
  34. {
  35. MAX_STEPS = steps;
  36. } // end if
  37. } // end of for
  38. } // end of for
  39. if (available_area == 0)
  40. {
  41. break;
  42. } // end if
  43. for (var i = 0; i < available_area; ++i)
  44. {
  45. lx = lx2;
  46. ly = ly2;
  47. } // end of for
  48. current_available_Max = available_area;
  49. } // end of for
  50. if (MAX_STEPS == 999)
  51. {
  52. return (0);
  53. } // end if
  54. available_area = 0;
  55. for (var i = 0; i < ymax; ++i) //求得全部最短路径点
  56. {
  57. for (var j = 0; j < xmax; ++j)
  58. {
  59. if (cel[j].steps == MAX_STEPS && cel[j].win)
  60. {
  61. lx[available_area] = j;
  62. ly[available_area] = i;
  63. ++available_area;
  64. } // end if
  65. } // end of for
  66. } // end of for
  67. if (available_area == 0) //最短路径点个数
  68. {
  69. return (0);
  70. } // end if
  71. rnd_index = Math.floor(Math.random() * available_area);
  72. rnd_available_X = lx[rnd_index];
  73. rnd_available_Y = ly[rnd_index];
  74. for (var i = 0; i < 200; ++i) //随机选择一个最优路线起点行走
  75. {
  76. available_area = 0;
  77. for (var j = 0; j < 6; ++j)
  78. {
  79. tmp_catx = rnd_available_Y % 2 ? (rnd_available_X + addx1[j]) : (rnd_available_X + addx0[j]);
  80. tmp_caty = rnd_available_Y + addy0[j];
  81. if (cel[tmp_caty][tmp_catx].stat != 1)
  82. {
  83. continue;
  84. } // end if
  85. if (cel[tmp_caty][tmp_catx].steps >= cel[rnd_available_Y][rnd_available_X].steps)
  86. {
  87. continue;
  88. } // end if
  89. lx[available_area] = tmp_catx;
  90. ly[available_area] = tmp_caty;
  91. ld[available_area] = j;
  92. ++available_area;
  93. } // end of for
  94. if (available_area == 0)
  95. {
  96. return (0);
  97. } // end if
  98. rnd_index = Math.floor(Math.random() * available_area);
  99. rnd_available_X = lx[rnd_index];
  100. rnd_available_Y = ly[rnd_index];
  101. if (cel[rnd_available_Y][rnd_available_X].steps == 1) //最后出去的时候
  102. {
  103. catx = rnd_available_X;
  104. caty = rnd_available_Y;
  105. catdir = 0;
  106. for (var j = 0; j < 6; ++j)
  107. {
  108. tmp_catx = rnd_available_Y % 2 ? (rnd_available_X + addx1[j]) : (rnd_available_X + addx0[j]);
  109. tmp_caty = rnd_available_Y + addy0[j];
  110. if (cel[tmp_caty][tmp_catx].steps == 0)
  111. {
  112. catdir = (j + 3) % 6;
  113. } // end if
  114. } // end of for
  115. return (1); //游戏结束
  116. } // end if
  117. } // end of for
  118. return (0);
  119. } // End of the function
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 05:19 , Processed in 0.028250 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表