//回行扫描函数 left、top、right、bottom function scanRound(x,y,w,h,isOpenFunc,callfunc) { const map={} function isOpen(x,y) { if(map[x+','+y]){ return 0 } if(x<0||x>=w||y<0||y>=h){ return 0; } return isOpenFunc(x,y) } function callback(x,y) { map[x+','+y]=true; return callfunc(x,y) } if(isOpen(x,y)){ callback(x,y) }else{ return; } const dreMap={ left:{x:-1,y:0}, right:{x:1,y:0}, bottom:{x:0,y:1}, top:{x:0,y:-1}, } const pos={ x,y } let dre='init'; while (dre!=='end'){ if(dre==='init'){ if(isOpen(pos.x+dreMap.left.x,pos.y+dreMap.left.y)){ dre='left'; }else if(isOpen(pos.x+dreMap.top.x,pos.y+dreMap.top.y)){ dre='top'; }else if(isOpen(pos.x+dreMap.right.x,pos.y+dreMap.right.y)){ dre='right'; }else if(isOpen(pos.x+dreMap.bottom.x,pos.y+dreMap.bottom.y)){ dre='bottom'; }else{ dre='end'; } } if(dre!=='end'){ const npos={ x:pos.x+dreMap[dre].x,y:pos.y+dreMap[dre].y } if(isOpen(npos.x,npos.y)){ pos.x=npos.x; pos.y=npos.y; callback(pos.x,pos.y) }else{ dre='init'; } } } } scanRound(0,0,100,100,function (x,y) { return 1; },function (x,y) { console.log(x,y); })