用寻路算法写的一个小项目

地址

https://a1115040996.github.io/arithmetic/html/寻路应用.html

没来得及仔细优化,后面再优化

代码如下

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><link rel="stylesheet" type="text/css" href="../css/way-finding.css"/></head><body><ul id="ul-table"></ul><script src="../js/plugin/jquery-2.1.0.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">/************************************** 估价函数* f(n) = g(n) + h(n)* g(n) 起始点距离目标点的距离* h(n) 结束点距离目标点的距离* f(n) 估价   最小距离为最优解决方案* * * 创建矩阵* 1. 起点* 2. 终点* 3. 障碍* 4. 移动路径**************************************/var sizeGrid = 25;// 点的长宽var startLocation;// 起点var endLocation;// 终点var openArr = [];// 开始点var closeArr = [];// 结束点结果var rocksArr = []; //障碍物var canClose = true; // 是否已经找到路径var mList = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,3,0,0,0,0,3,3,0,0,0,0,0,0,0,1,3,0,0,0,0,3,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,3,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]function createList(list){$("#ul-table").width(sizeGrid*20+1+1)var fragment = document.createDocumentFragment()for (var i=0;len = list.length,i<len;i++) {var _li = $('<li uid='+(i+1)+' x='+(i % 20 + 1)+' y='+(Math.floor(i / 20)+1)+'></li>').css({'width': sizeGrid,'height':sizeGrid})if(list[i] === 1){ // 起始点startLocation = _liopenArr.push(_li)_li.addClass('start')}else if(list[i] === 2){ // 结束点endLocation = _li_li.addClass('end')//closeArr.push(_li)}else if(list[i] === 3){ // 障碍closeArr.push(_li)rocksArr.push(_li)_li.addClass('remora')}else if(list[i] === 4){ // 移动点_li.addClass('move')}fragment.appendChild(_li[0])}return fragment}$("#ul-table").append(createList(mList))// 寻迹算法function f(nodeGrid){return g(nodeGrid) + h(nodeGrid)}// 目标点 距离起始点的距离function g(nodeGrid){var a = nodeGrid.offset().left - startLocation.offset().leftvar b = nodeGrid.offset().top - startLocation.offset().topreturn Math.sqrt(a*a + b*b)}// 目标点距离结束点的距离function h(nodeGrid){var a = nodeGrid.offset().left - endLocation.offset().leftvar b = nodeGrid.offset().top - endLocation.offset().topreturn Math.sqrt(a*a + b*b)}// 获取可能的落脚点function findNextStepList(){var result = [];// 存储结果集var preStep = openArr.shift()var startX = +preStep.attr('x')var startY = +preStep.attr('y')closeArr.push(preStep)getPossibleGrid(startX, startY)// 获取可能的落脚点function getPossibleGrid(x,y){var _startX = (x-1) > 1 ? (x-1) : x;var _startY = (y-1) > 1 ? (y-1) : y;var _endX = (x+1) <= 20 ? (x+1) : x;var _endY = (y+1) <= 20 ? (y+1) : y;for(var i=_startX;i<=_endX;i++){for (var j=_startY;j<=_endY;j++) {if(!(i===startX&&j===startY)){if(locationFilter(i,j)){console.log()$('li[x='+i+'][y='+j+']')[0].par = preStep$('li[x='+i+'][y='+j+']')[0].distance = f($('li[x='+i+'][y='+j+']'))openArr.push($('li[x='+i+'][y='+j+']'))if(endLocation.attr('x')==i&&endLocation.attr('y')==j){canClose = false}}}}}// 排序openArr.sort(function(v1, v2){return v1[0].distance - v2[0].distance})// 从数据中去除关闭的 和 已经设置父级指针的function locationFilter(x,y){for (var i=0;i<closeArr.length;i++) {if(+closeArr[i].attr('x') === x && +closeArr[i].attr('y') === y){return false}}for (var i=0;i<openArr.length;i++) {if(+openArr[i].attr('x') === x && +openArr[i].attr('y') === y){return false}}return true}}}// 寻路function findLocationLoop(){while(canClose){findNextStepList()}}function getRecallLocation(){var result = []function getRecall(dom){if($(dom).attr('x')==startLocation.attr('x')&&$(dom).attr('y')==startLocation.attr('y')){return result}else{result.push(dom)getRecall(dom[0].par)}}getRecall(closeArr.pop())return result}//findLocationLoop()/*$("#startFind").click(function(){findLocationLoop()var result = getRecallLocation()result.forEach(function(v,i){v.addClass('move')})})*/$("li").click(function(){if(this.className!=='remora'){$("li").removeClass('end').removeClass('move')$(this).addClass('end')endLocation = $("li[uid="+($(this).index()+1)+"]")openArr = [startLocation]closeArr = [...rocksArr]canClose = truefindLocationLoop()console.log(openArr)var result = getRecallLocation().reverse()result.push(endLocation)console.log(result)result.forEach(function(v,i){var timer = setTimeout(function(){$("li").removeClass('start')v.addClass('start')if(i>=result.length-1){startLocation = v$("li.end").removeClass('end')}},120*i)})}})</script></body>
</html>

  

转载于:https://www.cnblogs.com/MainActivity/p/10342315.html

使用寻路算法写的一个小项目相关推荐

  1. 基于STL实现自动贪心寻路算法的贪吃蛇小游戏

    基于STL实现自动贪心寻路算法的贪吃蛇小游戏 写贪吃蛇小游戏的想法来自CometOJ-Contest#13的B题,当时用STL双端队列维护蛇身的时候觉得非常方便,现在用EasyX图形库实现一下. 运行 ...

  2. 西门子行贿门情报列表,我自己写的一个小软件自动搜集到的。

    西门子行贿门消息列表 我自己写的一个小软件自动搜集到的. 其他类型情报也能自动收集. · 编号:1    西门子在华行贿案或涉及权力部门_中华财经    http://invest.8bio.com/ ...

  3. 做了一个小项目-PHP实现人生只有900个月

    做了一个小项目-PHP实现人生只有900个月 ​ 起因当然是阮一峰老师那篇振聋发聩的博文<人生只有900个月>,几年前看到以后羞愧到无法自拔,想到自己曾经浪费多少时间,在一些无意义的事情上 ...

  4. 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:前期需求调查部分)...

    两年前还在宁波时,我做过宁波教育局的一个小项目,一个部门内部使用的公文收发记录软件,这个项目当时是跟 他们的网络中心的老师洽谈的,网络中心负责此项目的老师,跟我们年龄差不多,30不到,可能要比我小上2 ...

  5. java学习笔记(二十八)——开发一个小项目(VMeeting3.0)

    上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...

  6. v54.04 鸿蒙内核源码分析(静态链接) | 一个小项目看中间过程 | 百篇博客分析HarmonyOS源码

    子曰:"回也其庶乎,屡空.赐不受命,而货殖焉,亿则屡中." <论语>:先进篇 百篇博客系列篇.本篇为: v54.xx 鸿蒙内核源码分析(静态链接篇) | 一个小项目看中 ...

  7. 三年前的一个小项目经验,分享给菜鸟兄弟们

    原文地址 (公文收发小软件:前期需求调查部分) 日期:2009年1月1日  晚上 分类:项目开发经验 两年前还在宁波时,我做过宁波教育局的一个小项目,一个部门内部使用的公文收发记录软件.这个项目当时是 ...

  8. c语言计算学生成绩的合格率,分享一个几年前刚学c的一个小项目。成绩的输入,查询,排序,插...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 分享一个几年前刚学c的一个小项目.成绩的输入,查询,排序,插入,删除,修改,求平均分总分.合格率的,对于初学者可以看看这种. #include void ...

  9. 通过一个小项目介绍Python3读写Access数据库(.mdb)的方法

    1. 小项目功能介绍 本文通过一个小项目介绍Python3读写Access数据库(.mdb)的方法,该项目功能较简单,将mdb中的旧编码替换为新编码,新旧编码对照表放在1个excel(本文命名为新旧编 ...

  10. 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:收款验收部分)...

    从一开始,我就意识到这个项目,我是搞错了,我没有隐瞒领导(备注,我们领导有20年以上的工作经验),心态也好,心境也高, 2位领导经验也丰富,也信任我,我也是为了公司好,也是比较好的出发点,他们给我打了 ...

最新文章

  1. Python脱产8期 Day02
  2. 3G网络关闭,4G还会远吗?
  3. 第13章:项目合同管理(1)-章节重点
  4. Linux下axel多线程下载
  5. 让 fork 出来的 Github 仓库从远端仓库拖取最新的修改
  6. 为什么SAP UI5框架在应用整个生命周期只调用onBeforeRendering一次
  7. [系统安全]使用OD编写连连看外挂
  8. 1.9_heap_topK_topK问题
  9. 压缩感知及应用 源代码_信言动态|学院成功举办2019年机器学习与压缩感知理论及其应用研讨会...
  10. android jni 结构体_中高级安卓开发技术!Android开发核心知识笔记共2100页,完整版开放下载...
  11. python julia go_Python的四个挑战者:Swift、Go、Julia、R
  12. 【GIS开发者】(GISDeveloper) 11-14期 提供下载
  13. storm任务提交流程
  14. php apply filters,apply_filters()应用过滤器
  15. 高并发核心技术Redis系列(七)--------Jedis操作Redis
  16. Android 音视频深入 六 使用FFmpeg播放视频(附源码下载)
  17. Matlab机器人工具箱(3-4):五自由度机械臂(计算力矩控制方法与roblocks)
  18. excel制作跨职能流程图_如何绘制泳道图(跨职能流程图)
  19. html xmlns=http://www.w3.org/1999/xhtml是啥
  20. 第09章_性能分析工具的使用

热门文章

  1. 纯新手DSP编程--5.30--任务的通信和同步
  2. JWT教程_3 oauth和JWT 整合
  3. python爬虫外贸客户_python实战成功爬取海外批发商价格信息并写入记事本
  4. 嵌入式系统——系统可靠度计算
  5. 兴业银行研发中心笔试题_2021国考笔试成绩即将发布,面试重点考什么?
  6. MR Shuffle流程 入门
  7. QT开发_弹出窗口禁用父窗口并移动到父窗口中心位置
  8. Linux快速查找库文件位置
  9. 三维空间下的交互设计
  10. 聊聊flink的RestartStrategies