三国杀吧 关注:3,411,498贴子:88,835,442

"清凉一夏" 拼图活动快速寻找解法

只看楼主收藏回复

感谢之前几个朋友在贴吧讨论解拼图的方法,写了个js版本的,省去了手动把拼图块转换成数字的时间,使用比较方便。
具体用法是先登陆活动页面,按下F12功能键 或者如下图右键点击页面,选择菜单中的检查按钮。

然后在页面弹出的窗口的标签栏选择“控制台”

在光标处复制以下的代码并回车即可。
//从这里开始复制
startflag = false;
if(typeof d == "undefined"){
alert("请在拼图页面进行操作,已在页面请刷新页面重试。");
d = [,1,2,3,4,5,6,7,8,0]
startflag = false;
}
else{
startflag = true;
}
function CheckFinished(array){
for (let index = 1; index < 9; index++) {
if( array[index] != index)
return false;
}
return true;
}
function printresult(arr){
arr.forEach(element => {
console.log("点击拼图块:", element);
});
}
_direct = [[], [2,4], [1,3,5], [2,6], [1,5,7], [2,4,6,8], [3,5,9], [4,8], [5,7,9],[6,8]];
function mywhereCanTo(i, arr){
let movepos = 0;
availpos = _direct[i];
availpos.forEach(element => {
if(arr[element] == 0){
movepos = element;
}
});
return movepos;
}
const puzzleobj = {
moves: [],
status: []
};
walkedstatus = new Set();
bfsque = new Array();
inits = Object.create(puzzleobj);
inits.moves = [];
inits.status = d.join();
walkedstatus.add(d.join());
flag = false;
bfsque.push(inits);
while (startflag && bfsque.length != 0 ) {
s = bfsque.shift();
if(CheckFinished(s.status.split(','))){
console.log("此拼图还原需要的步数为:", s.moves.length);
flag = true;
printresult(s.moves);
break;
}
bfsarr = s.status.split(',');
for (let index = 1; index < 10; index++) {
const element = bfsarr[index];
const tarid = mywhereCanTo(index, bfsarr);
if(tarid != 0){
newbfsarr = bfsarr.concat();
newbfsarr[tarid] = newbfsarr[index];
newbfsarr[index] = 0;
if(walkedstatus.has(newbfsarr.join()))continue;
walkedstatus.add(newbfsarr.join())
newstatus = Object.create(puzzleobj);
newstatus.status = newbfsarr.join();
newstatus.moves = s.moves.concat();
newstatus.moves.push(index);
bfsque.push(newstatus);
}
}
}
if (!flag && startflag){
alert("这份拼图无解,我们的游戏没有BUG哦。");
}
//到这里复制结束
最后执行效果是这样子的:

如果没有达到预期效果可以截图在下面回复。


1楼2020-08-03 00:02回复
    dd


    IP属地:山东来自Android客户端3楼2020-08-03 06:15
    回复
      感谢大佬,可惜步数全用光了,现在还没拼完


      IP属地:陕西来自Android客户端4楼2020-08-03 08:29
      回复
        js就是方便,浏览器就能看


        IP属地:浙江来自iPhone客户端5楼2020-08-03 09:02
        回复
          顶下精品帖子


          IP属地:广东来自Android客户端6楼2020-08-03 10:47
          回复
            哇,真的可以!
            可惜我要20步


            IP属地:福建7楼2020-08-03 19:20
            回复
              厉害!
              可惜我需要21步。。。


              IP属地:山东8楼2020-08-03 21:12
              收起回复
                请问大神我这为什么是零步


                IP属地:江西来自Android客户端10楼2020-08-03 22:19
                收起回复


                  IP属地:广东来自iPhone客户端11楼2020-08-04 08:57
                  回复
                    21步0.0


                    IP属地:河北12楼2020-08-04 09:55
                    回复
                      今天是不可以了吗,我看chrome和edge好像都显示 找不到token if这个东西


                      IP属地:安徽来自Android客户端13楼2020-08-05 19:40
                      收起回复
                        大神怎么确定那个是图块几啊


                        IP属地:四川14楼2020-08-06 07:33
                        收起回复
                          这个方法老好用


                          IP属地:广东来自Android客户端15楼2020-08-06 08:16
                          回复
                            大佬


                            IP属地:河南来自Android客户端16楼2020-08-06 09:15
                            回复
                              我看九宫拼图自学拼过的…


                              IP属地:天津来自Android客户端17楼2020-08-06 13:23
                              回复